Экранирование скобок в параметре Powershell -Replace не работает - PullRequest
0 голосов
/ 01 мая 2020

Я хочу переименовать этот файл:

Howard -((TV) )RED HEADED LEAGUE.mp4

На это:

Howard - (TV) RED HEADED LEAGUE.mp4

Поскольку команда -Replace Powershell ожидает регулярные выражения регулярного выражения, я сделал это, чтобы переименовать файлы:

Get-ChildItem | Rename-Item -NewName {$_.name -replace '\(\(TV\) \)',' \(TV\) '}

Но, выводит эту ошибку:

Cannot rename the specified target, because it represents a path or device name.

И экранирование скобка с обратными галочками, как предлагает гугл, не выдает ошибок, но файлы не переименовываются:

Get-ChildItem | Rename-Item -NewName {$_.name -replace '`(`(TV`) `)',' `(TV`) '}

Как я могу сделать эту работу? Спасибо.

1 Ответ

1 голос
/ 01 мая 2020

Как упоминалось в комментариях, строка замены (второй правый аргумент -replace) НЕ нуждается в экранировании!

Подставка помещается в строку как дословную, поэтому результирующее имя файла в вашем примере становится Howard - \(TV\) RED HEADED LEAGUE.mp4 - поэтому файловая система жалуется, \ не является допустимым символом имени файла.

Если вы просто сделаете:

{$_.Name -replace '\(\(TV\) \)',' (TV) '}

... это сработает :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...