使用Powershell替换方括号

Kal*_*nGi 4 powershell rename pattern-matching

如果你有一个文件名,如"委员会会议记录[2010年10月] - hq.doc",你如何让Powershell取代方括号?以下不起作用:

ls  -filter *`[*`]* | foreach -Process { Rename-Item $_ -NewName ($_.Name -replace '\[', '\(') | Rename-Item $_ -NewName ($_.Name -replace '\]', '\)')}
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Rename-Item : Cannot rename because item at 'Committee minutes [October 2010] - hq.doc' does not exist.

At line:1 char:53
+ ls  -filter *`[*`]* | foreach -Process { Rename-Item <<<<  $_ -NewName ($_.Name -replace '\['
]', '\)')}
    + CategoryInfo          : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand
Run Code Online (Sandbox Code Playgroud)

Rom*_*min 9

不幸的是,这是PowerShell的已知错误/限制.一个合适的,实际上并不坏的解决方法是Move-Item用于重命名项目:它具有-LiteralPath缺少的参数Rename-Item.

查看报告的问题:

https://connect.microsoft.com/PowerShell/feedback/details/277707/rename-item-fails-when-renaming-a-file-and-the-filename-contains-brackets

https://connect.microsoft.com/PowerShell/feedback/details/553052/rename-item-literalpath