【问题标题】:Batch - Compare file date with actual date批处理 - 将文件日期与实际日期进行比较
【发布时间】:2015-07-06 09:24:57
【问题描述】:

我从文件中得到file date

for %%x in (%file_test%) do set file_date_test=%%~tx

然后我得到system date

set year=%date:~-4%
set month=%date:~3,2%
if "%month:~0,1%" == " " set month=0%month:~1,1%
set day=%date:~0,2%
if "%day:~0,1%" == " " set day=0%day:~1,1%

set hour=%time:~0,2%
if "%hour:~0,1%" == " " set hour=0%hour:~1,1%
set min=%time:~3,2%
if "%min:~0,1%" == " " set min=0%min:~1,1%

然后使用goto 执行if statement

IF %file_date_test% LSS %system_date_test% goto SOME

如何比较两个日期?我想检查文件日期是否超过 24 小时

最好的方法是什么?我可以使用forfiles吗?

【问题讨论】:

    标签: date batch-file compare


    【解决方案1】:

    已编辑 forfiles 命令甚至不会查看文件的小时,因此如果文件有不同的日期,之前的答案(在底部以防有人发现它有用)将不起作用但不到 24 小时。

    另一种选择

    robocopy "c:\backup" "c:\backup" "test.bak" /l /nocopy /is /minage:1 > nul 
    if errorlevel 1 (
        echo MATCH
    ) else (
        echo NO_MATCH
    )
    

    至少在 Windows 7 中,robocopy 命令查看文件的时间戳以确定其年龄。


    上一个答案

    您可以使用forfiles检查操作的错误级别

    @echo off
        setlocal enableextensions disabledelayedexpansion
    
        set "file_test=c:\backups\test.bak"
    
        for %%a in ("%file_test%") do (
            forfiles /p "%%~dpa." /m "%%~nxa" /d -1 >nul 2>nul && echo MATCH || echo NO MATCH
        )
    

    或者

    @echo off
        setlocal enableextensions disabledelayedexpansion
    
        forfiles /p "c:\backups" /m "test.bak" /d -1 >nul 2>nul
        if errorlevel 1 (
            echo NO_MATCH
        ) else (
            echo MATCH
        )
    

    【讨论】:

    • 谢谢。第一行是什么意思? setlocal enableextensions disabledelayedexpansion
    • @mac94, setlocal 将确保在批处理文件结束时(或调用 endlocal)丢弃对环境变量的更改,但必须使用 enableextensionsdisabledelayedexpansion。这是一个习惯,我必须始终将它们包含在批处理文件的开头,以确保批处理的行为方式。有时人们禁用了扩展程序,for /f(只是一个 ex.)将不可用。或者delayedexpansion 可以启用并与! 产生问题。我使用包含该行只是为了确定代码运行的环境是什么。
    • 我尝试了第二种方式,并使用来自27-04-2015 的文件,它返回给我MATCH,但应该返回NO_MATCH
    • @mac94,如问题中所述。超过 24 小时
    • 抱歉,errorlevel 1 就像older than 24h?我不明白。
    猜你喜欢
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多