2

У меня есть папка с файлами изображений. Структура имени файла:ddmmyy2222.png, где dd = день, мм = месяц и yy = год. Я пытаюсь переименовать их в соответствии со структурой yyyymmdd.png следующим образом:

120516222.png => 20160512.png

010616222.png => 20160601.png

190316222.png => 20160316.png

% и s сводят меня с ума. Моя последняя попытка:

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

установить "oldfile = %% n"

установить "d =% oldfile:~ 0,2%"

установить "m =% oldfile:~ 2,2%"

установить "y =% oldfile:~ 4,2%"

установить "newfile = 20% y %% m %% d%"

эхо.% NewFile%

)

Но я даже не смог достичь заявления RENAME, так как не получил то, что мне нужно в ECHO. В чем дело? Большое спасибо!


1 ответ1

0

В чем дело

Вам нужно включить задержку расширения.

  • Отложенное расширение приведет к тому, что переменные будут расширены во время выполнения, а не во время разбора.

Используйте следующий пакетный файл (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

Заметки:

  • Измените команду dir соответствующим образом.
  • %variable% это заменить на !variable! при использовании отложенного расширения.

Пример:

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>

Дальнейшее чтение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .