Обратите внимание, что этот способ анализа даты сильно зависит от используемой локали.
%DATE%
возвращает текущую дату, используя формат короткой даты, который полностью (бесконечно) настраивается. Один пользователь может настроить свою систему для возврата Fri040811, а другой пользователь может выбрать 08/04/2011 ... это полный кошмар для программиста на BAT.
Есть два решения этой проблемы.
Решение 1, временно измените локаль.
reg copy "HKCU\Control Panel\International" "HKCU\Control Panel\International-Temp" /f >nul
reg add "HKCU\Control Panel\International" /v sShortDate /d "yyyy-MM-dd" /f >nul
reg add "HKCU\Control Panel\International" /v sTimeFormat /d "HH:mm:ss" /f >nul
выполните вашу логику% DATE%, например
set datestr=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
ren test.txt test-%datestr%.txt
и затем восстановить языковой стандарт обратно
reg copy "HKCU\Control Panel\International-Temp" "HKCU\Control Panel\International" /f >nul
Решение 2. использовать WMIC.
WMIC Path Win32_LocalTime Get Day,Hour,Minute,Month,Second,Year /Format:table
возвращает дату удобным способом, чтобы непосредственно проанализировать ее с FOR.