2010-11-03 100 views
4

如果您有一個文件名,例如「委員會會議記錄[2010年10月] - hq.doc」,您如何讓Powershell替換方括號?以下不工作:使用Powershell替換方括號

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

我得到的錯誤:

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 

回答

9

不幸的是這是PowerShell中的一個已知的bug /限制。一個合適且實際上並不壞的解決方法是使用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

+0

感謝@roman!移動項目做了訣竅。 – KalenGi 2010-11-03 18:11:17

+0

也許使用'[regex] :: escape($ string)'可以做到這一點。 – Marco 2017-05-11 19:24:27