簡體   English   中英

如何檢查文件的大小是否從上次在批處理或Java中修改?

[英]How to check if size of a file was modified from the last time in batch or java?

我有一個腳本,該腳本從遠程計算機讀取日志,並且如果其中存在一些錯誤,則帶有錯誤的行會以Test.txt文件的形式復制到我的計算機中。 如果此文件的大小大於0(表示發現錯誤),在這里我將執行一些邏輯,例如發送電子郵件。 問題是,即使日志僅包含1個錯誤,此腳本也會每次發送電子郵件。

因此,我想做的是檢查計算機中文件的大小是否大於上次的大小。 我需要批量或在Java中執行此操作。

通過將文件大小和/或最后修改時間保存到另一個文件中,可以比較自上次檢查以來的文件大小或文件的最后修改日期,並將實際文件大小/最后修改日期與附加文件中保存的字符串進行比較。

但是更容易使用的是archive屬性,如果修改了文件,它將始終自動設置。 因此,所有要做的就是在處理完文件中的數據后,從文件中刪除存檔屬性,然后檢查是否由於文件修改而再次設置了存檔屬性。

這是示例代碼:

@echo off
set "LogFile=C:\Temp\Errors.log"
"%SystemRoot%\system32\attrib.exe" "%LogFile%" | "%SystemRoot%\system32\findstr.exe" /B /L A 1>nul
if errorlevel 1 goto EndBatch

rem The log file has archive attribute set as modified since last check
echo File "%LogFile%" was modified since last check.

rem Remove the archive attribute from log file before reading the
rem contents of the log file and send the error lines via email.
rem Of course the archive attribute can be removed also after the
rem data of the log files were processed by additional batch code.
"%SystemRoot%\system32\attrib.exe" -A "%LogFile%"

:EndBatch
set LogFile=

Windows標准應用程序attrib.exe在輸出行的開頭輸出文件屬性,並在某些空格后輸出文件名。 如果僅設置了存檔屬性,則輸出行以A開頭;如果為文件設置了存檔屬性或任何其他屬性,則輸出行以空格開頭。

具有選項/B/L的Windows標准應用程序findstr.exe在行的開頭搜索A ,如果找到則以退出代碼0終止。但是,如果attrib.exe的輸出行不是以A開頭,則返回值findstr.exe被分配給1環境變量ERRORLEVEL ,這意味着未在文件上設置archive屬性,因此自上次檢查以來未修改文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM