Batch renomear nomes de arquivos, reter ext?

1

(Win10) Em um arquivo de lote, como renomeio recursivamente arquivos nomes em uma pasta? Não é a extensão .

por exemplo,

Arquivos para renomear: heavy.doc, bright.jpg, fast.docx, quiet.png, etc

Renomeie para: A1. *, A2. *, A3. *, A4. *, etc (onde o. * mantém o ext original)

Torna-se: A1.doc, A2.jpg, A3.docx, A4.png, etc

Obrigado!

    
por narrator dru 14.04.2017 / 12:17

1 resposta

1

Após uma rápida olhada na página de referência para para , eu pude pensar nisso:

@echo off & setlocal EnableDelayedExpansion 
set a=1
for /f "tokens=1,2 delims=." %%G in ('dir /b /s /A:-D') do (
    ren "%%G.%%H" "A!a!.%%H" 
    set /a a+=1
)

Atualização: seria melhor passar a pasta inicial como um parâmetro, para que o próprio script possa ser colocado em qualquer lugar e não corra o risco de ser renomeado.

@echo off & setlocal EnableDelayedExpansion 
set a=1
for /f "tokens=1,2 delims=." %%G in ('dir /b /s /A:-D %1') do (
    ren "%%G.%%H" "A!a!.%%H" 
    set /a a+=1
)

Explicação:

@echo off evita que todos os comandos sejam gravados no console.

setlocal EnableDelayedExpansion isso é necessário para que a variável a aumente de fato.

set a=1 criamos uma variável de contador chamada a e definimos seu valor inicial como 1 .

for /f loop contra uma lista de nomes de arquivos.

tokens=1,2 delims=. o nome do arquivo será dividido quando . for encontrado. Estamos interessados nos dois primeiros tokens resultantes dessa operação. Nota: espera-se que nomes de arquivos não contenham um ponto, exceto entre o nome da base e a extensão.

%%G é o nome do primeiro token (está implícito que o segundo será %%H ).

in ('dir /b /s /A:-D %1') executa o loop sobre os resultados do comando dir , que lista os arquivos no diretório transmitidos como um parâmetro %1 com as seguintes opções: /b clean output, /s include resultados de subdiretórios, /A:-D apenas lista arquivos e não nomes de pastas.

ren "%%G.%%H" "A!a!.%%H" renomeie o nome do arquivo ( %%G.%%H reconstrói o nome do arquivo original) para uma constante A mais a variável a do valor atual, mais a extensão original %%H .

set /a a+=1 incrementa a variável do contador.

    
por 14.04.2017 / 13:09