%%~t
дает вам дату и время файла вдоль строк:
23/03/2011 04:27 PM
, но даже этот может зависеть от локали.
С другой стороны, time /t
дает вам 03:57 PM
, а date /t
дает вам Wed 22/06/2011
, , ни один из которых не подходит в качестве совпадения.
Если вы хотите иметь возможность сопоставлять их, вам нужно будет выполнить некоторые хитрости со строками, чтобы получить дату только из %%~t
(обрезать время) и date /t
(обрезать название дня).
Или вы можете избавить себя от хлопот, забыть об этом странном занятии, которое я люблю называть cmd-gymnastics, и использовать приличную утилиту find
, либо загрузив CygWin , либо используя более легкий * 1026 Инструмент * GnuWin32 (поиск FindUtils).
Если вы должны использовать cmd
, вы можете начать со следующего:
@setlocal enableextensions enabledelayedexpansion
@echo off
rem Get todays date
for /f "tokens=1,2,*" %%a in ('date /t') do set today=%%b
echo %today%
rem Process each file in turn.
for %%a IN (.\*) do call :procFile "%%a" %%~ta
endlocal
goto :eof
:procFile
if %2==%today% echo %2 %1
goto :eof
Но, опять же, имейте в виду, что это может сломаться, если ваша информация о локали изменится. Несколько лет назад я написал сценарий, который обошел эти программы, чтобы получить более точную информацию с помощью WMI:
for /f "skip=2 tokens=2-7 delims=," %%A in ('wmic path win32_localtime get day^,hour^,minute^,month^,second^,year^ /format:csv') do (
set /a mydate = 10000 * %%F + 100 * %%D + %%A
set /a mytime = 10000 * %%B + 100 * %%C + %%E
)
set mydate=00000000%mydate%
set mydate=%mydate:~-8%
set mytime=000000%mytime%
set mytime=%mytime:~-6%
Это дает вам дату и время в формате YYYYMMDD
и HHMMSS
, но вы можете адаптировать его для других значений.