Манипулирование датами в пакетных файлах практически невозможно сделать правильно разумным способом. Единственное, что вы можете сделать, это поддержать свою культуру и игнорировать все остальное.
Однако, если у вас есть имя файла в параметре пакета (или подпрограммы), вы можете использовать %~t1
. В противном случае следующее:
for %%x in (%file%) do set datetime=%%~tx
На моей машине это выглядит как «2009-08-28 16:13», который затем можно разбить на отдельные части:
:dissect_date_time
for /f "tokens=1-5 delims=-: " %%a in (%1) do set year=%%a&set month=%%b&set day=%%c&set hour=%%d&set minute=%%e
goto :eof
это подпрограмма, которую вы можете вызвать с помощью
call :dissect_date_time %datetime%
и тогда у вас есть отдельные части в соответствующих переменных среды. Адаптируйся соответственно своему формату даты / времени. В этом широко используется for
в качестве токенизатора.
Получив отдельные детали, вы можете попытаться выяснить, сколько лет файлу, просто выполнив тот же процесс с текущей датой / временем и вычитая. Не будет много веселья, но работает.