我正在尝试处理几百个文件夹的文件夹,这些文件夹在名称中都有括号和方括号,但在我想删除的方括号之前还有一个不需要的空格。
示例:c:/Documents/MainFolder/Subfolder1Title (Attribute1) (Attribute2) [UniqueNumber ] - []
(“UniqueNumber是不需要的空间”之后的空格
我想编写一个脚本,查找所有包含“] - []”的文件夹,并将其替换为“] - []”,而不更改文件夹名称的其余部分,以便最终为:{ {1}}
我已经尝试过其他问题的几个解决方案,但大多数只处理文件而不是文件夹,并且出于某种原因,方括号出现了问题,似乎无法解决。 (在[]之前使用``
示例:
c:/Documents/MainFolder/Subfolder1Title (Attribute1) (Attribute2) [UniqueNumber] - []
请帮忙。
答案 0 :(得分:0)
避免一次提出多个不同的问题。我将回答与您的问题标题相关的第一个问题。
-match
需要正则表达式,因此您必须转义 [
。$_fullname
缺少一个点。这应该有效:
Get-ChildItem | Where-Object {$_.Name -match '\s+]\s+-\s+\[]'} |
Rename-Item -NewName ({$_.fullname -replace "\s+]\s+-\s+\[]" , "] - []"})
注意:您应该不更改目录,而是指定Get-ChildItem
cmdlet中的路径。
这里我使用的脚本有效:
$dir = "c:/" # changed this to C:/
# Create a Sample folder
$sampleFolderPath = Join-Path $dir 'Subfolder1Title (Attribute1) (Attribute2) [UniqueNumber ] - []'
New-Item $sampleFolderPath -ItemType Directory -Force
# Now lets rename it
Get-ChildItem -Path $dir |
Where-Object {$_.Name -match '\s+]\s+-\s+\[]'} |
Rename-Item -NewName ({$_.fullname -replace "\s+]\s+-\s+\[]" , "] - []"})