重命名包含特殊字符的多个文件夹

时间:2017-05-22 11:26:02

标签: powershell powershell-v2.0 batch-processing

我正在尝试处理几百个文件夹的文件夹,这些文件夹在名称中都有括号和方括号,但在我想删除的方括号之前还有一个不需要的空格。

示例:c:/Documents/MainFolder/Subfolder1Title (Attribute1) (Attribute2) [UniqueNumber ] - [] (“UniqueNumber是不需要的空间”之后的空格

我想编写一个脚本,查找所有包含“] - []”的文件夹,并将其替换为“] - []”,而不更改文件夹名称的其余部分,以便最终为:{ {1}}

我已经尝试过其他问题的几个解决方案,但大多数只处理文件而不是文件夹,并且出于某种原因,方括号出现了问题,似乎无法解决。 (在[]之前使用``

示例:

c:/Documents/MainFolder/Subfolder1Title (Attribute1) (Attribute2) [UniqueNumber] - []

请帮忙。

1 个答案:

答案 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+\[]" , "] - []"})