2015-07-20 171 views
0

我想創建一個批處理來檢查文件是否已被修改到今天的日期,我所做的是「引入系統的日期,並與修改日期,如果他們匹配,則觸發一些我的批處理文件,運作良好,並顯示了兩個正確的日期,但如果聲明說,日期不匹配批處理文件檢查文件得到更新到今天的日期(系統日期)

@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 

回答

2

主要有以下問題:。

  • do 不是使用變量名稱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 

注:方面,在批處理文件中所有的日期是依賴語言環境。

+0

那麼當你在命令提示符中輸入'date/T'時,你的日期格式是什麼?它與'echo%Date%'相同嗎?它應該是...和你的'echo%FileDate%'值的格式是什麼?它也是一樣的(忽略時間部分)?? – aschipfl

+0

日期/ T是2015年7月29日,同%日期% – hben

+0

回波%FILEDATE%值是2015年7月29日上午11點20 – hben

0

這裏是一個完全不同的方法:

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

forfiles命令能夠檢查該文件的日期的。在上面的命令行,它:

  • 遍歷當前目錄(.
  • 列表命名MyFile.txt(當然有onlyone)中的所有文件,
  • 但只有當它被修改+0今天后,
  • 然後在/C切換後執行命令行。

如果MyFile.txt今天(甚至將來)被修改,給定的命令行被執行; 如果它早於今天被修改,則顯示錯誤消息並且ERRORLEVEL被設置爲1

請注意,forfiles不是內置命令,可能無法在您的操作系統上使用。

+0

我會添加這個到你的其他答案,而不是作出一個新的答案,個人。 – SomethingDark

+0

@SomethingDark,我也在想這個,但是我發現這個答案太不同了,因爲它甚至不使用原始問題的代碼。我搜索了幫助中心,爲這種情況找到了最佳做法,但沒有成功。也許還有更多意見? – aschipfl

+0

再次感謝!我剛剛發佈了一個與此相關的新問題,我希望你也可以提供幫助。 – hben