%%~t 为您提供日期和文件的时间,大致如下:
23/03/2011 04:27 PM
但即使是 this 也可能是特定于语言环境的。
另一方面,time /t 给你03:57 PM 和date /t 给你Wed 22/06/2011,两者都没有作为匹配有用。
如果您希望能够匹配它们,则必须使用一些字符串技巧来仅从 %%~t(去掉时间)和 date /t(去掉日期名称)获取日期。
或者你可以省去麻烦,忘记我喜欢称之为 cmd-gymnastics 的奇怪活动,并使用一个像样的find 实用程序,或者通过下载CygWin 或使用更轻量级的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 格式的日期和时间,但您可以对其进行调整以提供其他值。