批处理文件检查文件更新到今天的日期(系统日期)

时间:2015-07-20 21:56:54

标签: date batch-file modified-date

我想创建一个批处理来检查文件是否已被修改为今天的日期,我所做的是"引入系统的日期并将其与修改日期进行比较,如果匹配,则触发某事。我的批处理文件运行良好并显示两个正确的日期,但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

2 个答案:

答案 0 :(得分:2)

存在以下问题:

  • 执行使用变量名date,因为这是一个包含当前日期的内置变量(类型为set /?以获取帮助);
  • 第一个for语句没用,因为%date%已经可用;
  • 字符串DATEONLYdateif语句中按字面比较,您需要说明%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不是内置命令,可能在您的操作系统上不可用。