Я заметил, что вам нужна только дата, а не время, поэтому вы можете сделать это следующим образом, используя существующий вызов метки. В этом случае также нет необходимости использовать FOR / R, поэтому я буду использовать обычнуюцикл for:
@echo off
FOR %%A IN ("F:\images 2017+\*.jpg") DO (
CALL :RenER "%%~fA" %%~tA
)
GOTO :eof
:RenER
PAUSE
ECHO %1
ECHO %2
SET "_tmp=%~2"
SET "_tmp=%tmp:/=-"
REN "%~1" "%~n1_%_tmp%%~x1"
PAUSE
GOTO :eof
Обратите внимание, что выше мы немедленно отбрасываем время, не заключая его в кавычки, поскольку вы не хотите, чтобы оно было частью имени файла.
Вы также можете полностью отказаться от вызова метки без необходимости отложенного расширения , воспользовавшись вторым циклом, в порядке предпочтения, я думаю, что это немного чище!
@echo off
FOR %%A IN ("F:\images 2017+\*.jpg") DO (
FOR /F "Tokens=1-3 Delims=/ " %%a IN ('echo.%%~tA') DO (
PAUSE
ECHO.%%~fA
ECHO.%%~tA
REN "%%~fA" "%%~nA_%%a-%%b-%%c%%~xA"
PAUSE
)
)
это красиво и чисто, и при незначительном редактировании мы можем вставить его непосредственно в CMD Prompt, что еще лучше Это потому, что мы не используем DelayedExpansion, Calling Label или переменные Tempпоэтому, изменив %%
s на %
s, мы можем затем вставить это непосредственно в строку CMD, что часто более удобно при выполнении таких операций:
Эта многострочнаяпросто вставьте в CMD напрямую:
FOR %%A IN ("F:\images 2017+\*.jpg") DO (
FOR /F "Tokens=1-3 Delims=/ " %a IN ('echo.%~tA') DO @(
PAUSE
ECHO.%~fA
ECHO.%~tA
REN "%~fA" "%~nA_%a-%b-%c%~xA"
PAUSE
)
)
или одну строку для вставки в CMD, если вы предпочитаете:
FOR %A IN ("F:\images 2017+\*.jpg") DO @( FOR /F "Tokens=1-3 Delims=/ " %a IN ('echo.%~tA') DO @( PAUSE& ECHO.%~fA& ECHO.%~tA& REN "%~fA" "%~nA_%a-%b-%c%~xA"& PAUSE ) )