2015-07-06 162 views
0

我從文件中得到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 statementgoto

IF %file_date_test% LSS %system_date_test% goto SOME 

如何比較兩個日期?我想檢查文件日期是否有超過24H

這是最好的方法嗎?我可以使用forfiles來做到這一點嗎?

回答

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 
) 

至少在視窗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 
    ) 
+0

感謝的錯誤級別。第一行的含義是什麼? 'setlocal enableextensions disabledelayedexpansion' – user1911

+1

@ mac94,'setlocal'本身將確保在批處理文件結束時(或調用'endlocal')時對環境變量的更改將被丟棄,但對於使用'enableextensions'和'disabledelayedexpansion '。這是一種習慣,我必須始終將它們包括在批處理文件的開頭,以確保批處理的行爲方式。有時候人們會禁用擴展名,並且'for/f'(只是前例)將不可用。或'delayedexpansion'可以啓用並且會產生'!'問題。我使用包含該行來確保代碼運行的環境是什麼。 –

+0

我嘗試了第二種方式,並使用'27-04-2015'中的文件,它返回給我'MATCH',但應返回'NO_MATCH' – user1911