Следующая команда рекурсивно обходит ваше соответствие структуры каталогов, и для каждого соответствующего файла или каталога выполняет переименование этого файла, заменяя каждый из символов-нарушителей на пустой символ с помощью оператора powershell -replace
.
Обратите внимание, что вам нужно будет создать регулярное выражение, которое соответствует всем регулярным символам, которые вы хотите отфильтровать. Чтобы соответствовать приведенному вами примеру и убрать круглые скобки, регулярное выражение будет:
$re = "[()]"
Если вы хотите добавить квадратные скобки, вы должны экранировать их, используя обратную косую черту:
$re = "[\[\]()]"
просто продолжайте добавлять символы между внешними квадратными скобками по мере необходимости:
$re = "[\[\]()!]"
Вот сценарий, обратите внимание на танец, так что оператор -replace
действует только на базовую часть имени на каждой итерации:
dir -Recurse | ?{$_.Name -match $re} | %{ren -literalpath $_.FullName -newname (join-path (get-item $_.PSPArentPath) $($_.Name -replace $re,""))}
Некоторые заметки:
- Аргумент
-LiteralPath
в команде ren
необходим для возможности замены файлов квадратными скобками: [] он доступен только в Powershell v3 IIRC.
- После переименования у вас могут возникнуть коллизии имен, этот скрипт не справится с этим.