Извлечь дату файла относительно просто, см. HELP CALL
и попробуйте этот простой BAT-файл
@echo off
setlocal enabledelayedexpansion
FOR %%A IN (*.*) DO (
set tf=%%~tA
echo %%~fA ... !tf!
)
Переход от этого подхода к решению вашей проблемы кажется довольно простым ...
@echo off
setlocal enabledelayedexpansion
FOR %%A IN (*.*) DO (
set tf=%%~tA
set fd=!tf:~0,10!
md !fd!
move /Y %%~fA !fd!
)
но, подождите, этот код не гарантированно выполняется.Существуют некоторые зависимости от формата даты, которые могут помешать выполнению этого простого кода.Обработка дат в BAT-файле не легка, потому что формат даты зависит от локали и даже от пользовательских предпочтений.В этом конкретном фрагменте он будет играть хаос в случае, если разделитель даты, например, /
;или если формат даты использует две цифры для года вместо четырех, делая дату, чтобы заполнить только 8 позиций вместо 10 ... Вариации формата и, следовательно, возможные ошибки этого кода бесконечны.
Одним из возможных решений является мгновенное изменение формата даты на известный формат.Вставьте этот код перед циклом
....
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
...
и затем вернитесь к исходному, после цикла.
...
reg copy "HKCU\Control Panel\International-Temp" "HKCU\Control Panel\International" /f >nul
...