2010-11-03 8 views
4

Si vous avez un nom de fichier tel que "Minutes du comité [October 2010] - hq.doc", comment Powershell peut-il remplacer les crochets? Ce qui suit ne fonctionne pas:Remplacer le crochet par Powershell

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

Je reçois l'erreur:

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 

Répondre

9

Malheureusement, c'est un bug connu/limitation de PowerShell. Une solution de contournement appropriée et en fait pas mauvaise est d'utiliser Move-Item pour renommer des éléments: il a le paramètre -LiteralPath qui est manquant dans Rename-Item.

Voir a signalé des problèmes:

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

Merci @roman! Move-Item a fait l'affaire. – KalenGi

+0

Peut-être que l'utilisation de '[regex] :: escape ($ string)' fera l'affaire. – Marco