如何簡單?沒有花哨的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
不知道這是否是我想要的。我需要它來檢查文件Results.txt,看看它是否在24小時內發生了變化,而不是目錄。 –
這是因爲文件可以不斷添加並從文件夾中刪除。如果腳本發現在一天的開始時沒有文件,並且整天添加和刪除文件但第二天文件夾爲空,則將顯示24小時內沒有任何變化。這就是爲什麼我有一個腳本每5分鐘檢查一次(使用dir)並在發生更改時寫入時間和日期,並且需要另一個腳本來檢查此文件是否在24小時內發生更改 –
@AlexPowell查看我的更新回答。 –