Замените квадратную скобку с помощью Powershell - PullRequest
4 голосов
/ 03 ноября 2010

Если у вас есть имя файла, например «Протокол комитета [октябрь 2010] - hq.doc», как вы можете заставить 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

1 Ответ

9 голосов
/ 03 ноября 2010

К сожалению, это известная ошибка / ограничение 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

...