Eu tenho um monte de arquivos nomeados como:
01. Filename.ext
02. Filename.ext
03. Filename.ext
etc.
Eu preciso renomeá-los em lote com PowerToys PowerRename aumentando o número no início do nome do arquivo por um valor específico, digamos 15, para que seus nomes se tornem, por exemplo:
16. Filename.ext
17. Filename.ext
18. Filename.ext
etc.
Pelo que entendi, devo usar Expressões Regulares para esta tarefa. Infelizmente é tudo que eu entendo sobre este assunto.
Então, peço sua ajuda com esta tarefa exata: o que colocar nos campos "Pesquisar:" e "Substituir por:"?
A opção do PowerShell :
Decompondo-o:
-match
operador usa correspondência de expressão regular , retorna um valor booleano e preenche a$Matches
variável automática . A expressão regular'^(\d+)(.+)$'
corresponderá a qualquer string que comece com um ou mais dígitos e pelo menos um caractere após esses dígitos e gerará dois grupos de captura, os dígitos iniciais no primeiro e todo o texto subsequente no segundo:-f
operador Format constrói uma string usando um modelo e uma lista de valores/variáveis. Especificadores de formato como od2
in{0:d2}
podem adicionar zeros à esquerda entre outras coisas:-NewName
pode ser uma string ou um scriptblock, o scriptblock permite que o novo nome seja baseado nos valores da$Matches
variável atual:PowerRename não é a ferramenta certa para esse tipo de renomeação complexa. Uma ferramenta mais poderosa é o Bulk Rename Utility , gratuito para uso pessoal.
Por exemplo, combino abaixo as operações de:
// Editar
Inspirado na ideia de @Keith Miller de usar um loop descendente/reverso para renomear arquivos em cmd/bat:
Para fazer o mesmo no PowerShell:
Editar //
Você também pode fazer isso na linha de comando:
Obs.:1. Supondo que ao renomear números de dois dígitos
Obs.:2. Sua pasta tem um total de 84 arquivos = 100 - 16
Obs.:3. Todos os arquivos têm a mesma extensão.
1. Primeiro, adicione um dígito a cada arquivo, renomeando
16. file.ext
->016. file.ext
, evitando assim conflito ao renomear01. file.ext
pelo nome de16. file.ext
(arquivo existente)Obs.:4. Use
For /L
loop de 1 a 84, defina_n=001
, ao adicionar 00, na variável front%i
, uma substring de comprimento máximo 2 (file source"!_n:~-2!.*.ext"
) e uma substring de tamanho máximo 3 (file target"!_n:~-3!.*.ext"
) serão usadas porren
para renomear seus arquivos em loop:2. Use novamente um
For /L
loop de 1 a 84, defina_c=1000%~i+15
, ao adicionar 1000, adicionando à variável%i
, uma substring de comprimento máximo 3 (arquivo source"!_c:~-3!.*.ext"
) e uma substring de tamanho máximo 3 (file target"!_n:~-2!.*.ext"
) serão usadas porren
para renomear seu arquivos em loop:Obs.:5. O resultado no loop será de 1 a 84:
Obs.:6. Isso pode ser facilmente expandido para 1 a 840, 1 a 8400, ...:
O mesmo em Bat/CMD:
Algumas leituras adicionais:
[√] definir /?
[√] Cmd/?
[√] Ren | Renomear
[√] Para Loop
[√] Para Loop /F
[√] Substring de sintaxe
[√] Entendendo start, 2>nul, cmd e outros símbolos em um arquivo de lote