O comando a seguir percorrerá recursivamente sua correspondência de estrutura de diretório e, para cada arquivo ou diretório correspondente, executará uma renomeação nesse arquivo, substituindo cada um dos caracteres ofensivos por um caractere vazio usando o operador powershell -replace
.
Note que você terá que criar uma expressão regular que corresponda a todos os caracteres regulares que você deseja filtrar. Para corresponder ao exemplo fornecido e remover parênteses, a expressão regular seria:
$re = "[()]"
Se você deseja adicionar colchetes, é necessário evitá-los usando barras invertidas:
$re = "[\[\]()]"
continue adicionando caracteres entre os colchetes externos conforme necessário:
$re = "[\[\]()!]"
Aqui está o script, observe o bit de dança para que o operador -replace
atue somente na parte base do nome em cada iteração:
dir -Recurse | ?{$_.Name -match $re} | %{ren -literalpath $_.FullName -newname (join-path (get-item $_.PSPArentPath) $($_.Name -replace $re,""))}
Algumas notas:
- O argumento
-LiteralPath
no comandoren
é necessário para substituir arquivos com colchetes: [] está disponível apenas no Powershell v3 IIRC. - Você pode acabar com colisões de nomes após a renomeação, esse script não lida com isso.