Переименуйте-Item используя -Replace с несколькими шаблонами

821
Bjørn H. Sandvik

Рассмотрим файлы:

Файл1 (Пользовательский) .jpg
Файл1 (Пользовательский) .jpg

Мне нужно переименовать файлы, чтобы убрать "(Custom)" и / или "(Custom)" из строки имени (обратите внимание на пробел перед открывающей скобкой).

Сделать это достаточно просто Rename-Item -NewName {$_.name -replace " \(Custom\)", ""}, но я бы хотел сделать и то, и другое (и, возможно, дополнительные строковые шаблоны).

Мне трудно задать Google правильный вопрос, казалось бы ..

0
Ищите регулярные выражения или подумайте об использовании более простой схемы, например, взятия первых N символов. Seth 6 лет назад 0

1 ответ на вопрос

0
Clayton

Читайте о регулярных выражениях, как предложено @Seth. Много времени вы будете использовать регулярные выражения с -matchв PowerShell, но и другие командлеты вроде -replaceи select-stringиспользовать их.

Похоже, вы уже узнали, что вам нужно экранировать специальные символы, такие как скобки, с обратной косой чертой. Вы можете сопоставлять пробелы с \sи указывать количество совпадений 0 или более *. Далее вы можете использовать оператор ИЛИ, который является символом канала, |чтобы соответствовать одному из нескольких вариантов (x | y | z) (x или y или z).

"file 1 (fred).jpg" -replace "\s*(\(fred\)|\(barney\)|\(wilma\))", "" file 1.jpg  "file 2(barney).jpg" -replace "\s*(\(fred\)|\(barney\)|\(wilma\))", "" file 2.jpg