Troca de caracteres dentro do nome do arquivo em um arquivo de lote do Windows

2

Eu tenho uma pasta com arquivos de imagem. A estrutura do nome de arquivo é ddmmyy2222.png onde dd = dia, mm = mês e yy = ano. Eu estou tentando renomeá-los de acordo com a estrutura yyyymmdd.png assim:

120516222.png => 20160512.png

010616222.png => 20160601.png

190316222.png => 20160316.png

% 's e' 'estão me enlouquecendo. Minha última tentativa é:

FOR /F %%n IN ('dir /b ') DO (

set "oldfile=%%n"

set "d=%oldfile:~0,2%"

set "m=%oldfile:~2,2%"

set "y=%oldfile:~4,2%"

set "newfile=20%y%%m%%d%"

echo.%newfile%

)

Mas não consegui nem chegar à declaração da RENAME, pois não consegui o que preciso no ECHO. O que há de errado? Muito obrigado!

por user2261983 02.06.2016 / 22:04

1 resposta

0

O que há de errado

Você precisa expansão ativadaelayed .

  • Expansão atrasada fará com que as variáveis sejam expandidas no tempo de execução e não no tempo de análise.

Use o seguinte arquivo de lote (test.cmd):

@echo off
setlocal EnableDelayedExpansion
for /f %%n in ('dir /b *.png') do (
  set "oldfile=%%n"
  set "d=!oldfile:~0,2!"
  set "m=!oldfile:~2,2!"
  set "y=!oldfile:~4,2!"
  set "newfile=20!y!!m!!d!"
  echo.!newfile!
  )
endlocal

Notas:

  • Modifique o comando dir conforme apropriado.
  • %variable% é substituído por !variable! ao usar a Expansão com atraso.

Exemplo:

F:\test>dir *.png
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

02/06/2016  21:23                 0 010616222.png
02/06/2016  21:23                 0 120516222.png
02/06/2016  21:23                 0 90316222.png
               3 File(s)              0 bytes
               0 Dir(s)  1,769,583,063,040 bytes free

F:\test>test
20160601
20160512
20623190

F:\test>

Leitura Adicional

por 02.06.2016 / 22:50