【问题标题】:Batch file check file get updated to today's date(System Date)批处理文件检查文件更新为今天的日期(系统日期)
【发布时间】:2015-10-10 04:44:31
【问题描述】:

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

【问题讨论】:

    标签: date batch-file modified-date


    【解决方案1】:

    存在以下问题:

    • 不要使用变量名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
    

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

    【讨论】:

    • 那么当您在命令提示符中输入date /T 时,您的日期格式是什么?和echo %Date%一样吗?它应该是......你的echo %FileDate%值的格式是什么?是不是也一样(忽略时间部分)??
    • 日期/T 是 07/29/2015,与 %date% 相同
    • echo %FileDate% 值为 07/29/2015 11:20 AM
    • 为了将其转换为类似的格式,我必须添加 [set DATEONLY=%FileDate:~0,10%]
    • 是的,set DATEONLY=%FileDate:~0,10% 行会截断时间;但是for /f "tokens=1,2,3,4 delims=. " %%i in ('date /t') do set date=%%k%%j 行无效,因为您将. 指定为分隔符,但您的日期格式使用/;所以%%j%%k 都是空的,因此for 主体扩展为set date=echo %date% 行显示日期,因为 %date% 是一个内置变量,(当不被覆盖时)扩展为当前系统日期......
    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

    • 我会将此添加到您的其他答案中,而不是亲自做出新的答案。
    • @SomethingDark,我也在考虑这个问题,但我发现这个答案太不一样了,因为它甚至没有使用原始问题的代码。我搜索了帮助中心以找到此类情况的最佳实践,但没有成功。也许还有一些意见??
    • 再次感谢!我刚刚发布了一个与此相关的新问题,希望您也能提供帮助。
    • @hben,我猜你说的是this,对吧?
    猜你喜欢
    • 2012-02-26
    • 2011-09-26
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多