我想创建一个批处理来检查文件是否已被修改为今天的日期,我所做的是"引入系统的日期并将其与修改日期进行比较,如果匹配,则触发某事。我的批处理文件运行良好并显示两个正确的日期,但IF语句说明日期不匹配。
@ECHO OFF
for /f "tokens=1,2,3,4 delims=. " %%i in ('date /t') do set date=%%k%%j
echo %date%
pause
FOR %%a IN (D:\MyFile.txt) DO SET FileDate=%%~ta
set DATEONLY=%FileDate:~0,10%
echo %DATEONLY%
pause
if DATEONLY==date (
echo date ok
)
else (
cls
ECHO Wrong
)
PAUSE
答案 0 :(得分:2)
存在以下问题:
date
,因为这是一个包含当前日期的内置变量(类型为set /?
以获取帮助); for
语句没用,因为%date%
已经可用; DATEONLY
和date
在if
语句中按字面比较,您需要说明%DATEONLY%==%date%
; else
语句必须与if
正文的右括号(if /?
类型的帮助)在同一行; 所以试试这个:
@ECHO OFF
echo %date%
pause
FOR %%a IN (D:\MyFile.txt) DO SET FileDate=%%~ta
set DATEONLY=%FileDate:~0,10%
echo %DATEONLY%
pause
if %DATEONLY%==%date% (
echo date ok
) else (
ECHO Wrong
)
PAUSE
注意:请注意,批处理文件中的所有日期都与语言环境有关。
答案 1 :(得分:0)
这是一种完全不同的方法:
forfiles /P . /M MyFile.txt /D +0 /C "cmd /C echo @fdate @file"
forfiles
命令能够检查文件日期。在上面的命令行中,它:
.
),MyFile.txt
的所有文件(当然只有一个),+0
天后修改/C
开关后执行命令行。如果今天(甚至将来)修改了MyFile.txt
,则执行给定的命令行;
如果早于今天修改,则会显示一条错误消息,ERRORLEVEL
设置为1
。
请注意,forfiles
不是内置命令,可能在您的操作系统上不可用。