2012-12-14 112 views
2

我需要一些幫助製作服務應用程序批處理文件。批處理文件檢查日誌文件的md5sum

簡而言之,應用程序會檢查文件夾中是否有新文件,如果是這樣,它會寫入日誌文件(Results.txt)。

問題是,如果24小時內文件夾中沒有「結果」,通常會出現問題。 (服務崩潰或者有網絡問題。)所以我需要編寫一個批處理腳本來檢查文件是否在過去的24小時內被修改過。

我的計劃是每24小時運行一個批處理文件,檢查Results.txt的md5sum以查看它是否已更改。但是,我不知道如何去做這件事。在僞代碼中,它看起來像這樣:

if not exist old.txt echo. > old.txt & fc "md5.txt" "old.txt" 
%md5sum% Results.txt > md5.txt 
set equal=no 
if md5.txt==old.txt set equal=yes 
if equal=no echo No results found in 24 hours >> log.txt 

回答

0

如何簡單?沒有花哨的MD5,只是dir命令的輸出!這是可行的,因爲如果它正在檢查的目錄中沒有任何變化,則無論它何時運行,dir命令輸出都將完全相同。

幫助和更多選項,請參閱:

dir /? 
fc /? 

例子:

@echo off 
if not exist old_fingerprint.txt echo. > old_fingerprint.txt 
:: List the directory information, recursive, last write timestamps, 4 digit date 
dir /n /s /t:w /4 > new_fingerprint.txt 
:: Check out fc /? for all of the comparison options. 
fc new_fingerprint.txt old_fingerprint.txt 
:: fc sets errorlevel to 0 when the files match and not 0 when the files do not match. 
if %ErrorLevel% NEQ 0 echo.No results found in 24 hours>> log.txt 

如果你要隱藏的批處理腳本的所有輸出在> nul只是把後面的fc線。

更新: 根據提供的新信息。

所以你只需要檢查Results.txt文件的最後寫入時間戳。只要你沒有寫入文件,當沒有改變,並更新時間戳。

或者更好的是,如果你所關心的是文件夾內是否有任何活動,只需檢查該文件夾的'上次寫入'時間戳。如果時間戳超過24小時,則可以在24小時內處理未找到的結果。

使用/t:w選項和dir命令,您可以解析所需的時間戳。

TLDR:KISS

更新2:

這裏是展示如何獲得的目錄信息的純擊穿一個示例腳本。

@echo off 
setlocal 

for /f "usebackq tokens=1,2,3,4,*" %%A in (`dir /a:d /l /n /t:w /4`) do (
    echo. 
    echo.Date = %%A 
    for /f "usebackq tokens=1,2,3 delims=/" %%X in ('%%A') do (
     echo.Month = %%X 
     echo.Day = %%Y 
     echo.Year = %%Z 
    ) 
    echo.Time = %%B 
    for /f "usebackq tokens=1,2 delims=:" %%X in ('%%B') do (
     echo.Hour = %%X 
     echo.Minute = %%Y 
    ) 
    echo.Meridiem = %%C 
    echo.Type Raw = %%D 
    for /f "usebackq tokens=1 delims=<>" %%X in ('%%D') do (
     echo.Type = %%X 
    ) 
    echo.Name = %%E 
    echo. 
) 

endlocal 

答: 這裏是說明一個簡單的方法來獲得和比較時間戳的腳本。設置計劃任務以每24小時運行一次該腳本,並且如果自上次運行以來時間戳記沒有發生變化,它將向日志文件輸出消息。

setlocal enabledelayedexpansion 

for /f "usebackq tokens=1,2,3,4,*" %%A in (`dir /a:d /l /n /t:w /4`) do (
    if /i "%%~E"=="Folder" (
     if exist "LastTimeStamp.txt" find /c /i "%%A %%B %%C %%E" LastTimeStamp.txt > nul 
     if !ErrorLevel! EQU 0 echo.The folder time stamp has not changed since last checked. >> log.txt 
     echo.%%A %%B %%C %%E > LastTimeStamp.txt 
    ) 
) 

endlocal 
+0

不知道這是否是我想要的。我需要它來檢查文件Results.txt,看看它是否在24小時內發生了變化,而不是目錄。 –

+0

這是因爲文件可以不斷添加並從文件夾中刪除。如果腳本發現在一天的開始時沒有文件,並且整天添加和刪除文件但第二天文件夾爲空,則將顯示24小時內沒有任何變化。這就是爲什麼我有一個腳本每5分鐘檢查一次(使用dir)並在發生更改時寫入時間和日期,並且需要另一個腳本來檢查此文件是否在24小時內發生更改 –

+0

@AlexPowell查看我的更新回答。 –

0

這將目錄中的文件進行比較,以當前的日期,如果它們比當前日期的,然後它會告訴你哪一個的是新的(不一定需要),如果沒有新的再它會記錄它。

如果在一天結束時使用計劃任務執行此操作,則應該可以正常工作。

cd yourdir 
forfiles /d +%date% /s /c "cmd /c echo @file is new" 2>nul 
if %errorlevel%==1 echo No results found in 24 hours >>log.txt 
+0

這似乎不工作 –

相關問題