批 - 将文件日期与实际日期进行比较

时间:2015-07-06 09:24:58

标签: date batch-file compare

我从文件中获取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%

然后使用if statement执行goto

IF %file_date_test% LSS %system_date_test% goto SOME

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

哪种方法最好?我可以使用forfiles来做吗?

1 个答案:

答案 0 :(得分: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
    )