0

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

2 回答 2

2

存在以下问题:

  • 不要使用变量名date,因为这是一个包含当前日期的内置变量(请输入set /?帮助);
  • 第一for条语句没用,因为%date%已经可用;
  • 字符串DATEONLYdate在您的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

注意:注意批处理文件中的所有日期都取决于区域设置。

于 2015-07-20T22:26:18.317 回答
0

这是一种完全不同的方法:

forfiles /P . /M MyFile.txt /D +0 /C "cmd /C echo @fdate @file"

forfiles命令能够检查文件日期。在上面的命令行中,它:

  • 遍历当前目录 ( .),
  • 列出所有命名的文件MyFile.txt(当然只有一个),
  • 但前提是它+0在今天之后的几天被修改过,
  • 然后在/C切换后执行命令行。

如果MyFile.txt今天(甚至将来)已经修改,则执行给定的命令行;如果它在今天之前被修改过,则会显示一条错误消息并ERRORLEVEL设置为1

请注意,这forfiles不是内置命令,可能在您的操作系统上不可用。

于 2015-07-20T23:08:34.643 回答