Tentei criar um pequeno script do PowerShell para renomear vários arquivos com nomes semelhantes babebibobu (ver.2.0).xlsx
em uma pasta e subpastas.
Quero remover o (ver.X.X)
de cada nome de arquivo.
Eu tentei este:
Get-ChildItem -Path "c:\test" -Recurse -Include "* (ver*.*).*" |
Rename-Item -NewName { $_.Name -replace " (ver*.*)","" }
mas o nome do arquivo se torna babebibobu ().xlsx
.
usa
-replace
regex para avaliar o que precisa ser substituído.(
...)
define um grupo, não caracteres de parênteses, que precisam ser escapados.Além disso, a regex dentro do grupo não é tão boa.
Tente isto, com base em um
(ver.2.0)
versionamento:se você tiver
(ver 2.0)
sintaxe, então o regex correto pode ser\s\((\.|\s)\d+\.\d+\)
\s
para qualquer caractere de espaço e(\.|\s)
é um grupo para dizer um ponto (\.
) ou (|
) qualquer caractere de espaço (\s
)\(
e\)
para parênteses escapados\d
para qualquer dígito entre 0 e 9,+
uma ou mais vezes, isso incluirá a versão ou versão secundária > 10\.
ponto de escape porque você quer um ponto e não qualquer caractere, mas quebra de linha (.
significa qualquer caractere, exceto LF)Esteja ciente de que as expressões regulares diferenciam maiúsculas de minúsculas, portanto
\s
, elas\d
precisam estar em minúsculas (as maiúsculas serão o oposto, tudo menos espaço e tudo menos dígito)