如何检查文件大小是否在上次批处理或java中被修改?

时间:2014-07-23 11:36:51

标签: java batch-file logging

我有一个从远程计算机读取日志的脚本,如果出现某些错误,带有错误的行会在Test.txt文件中复制到我的计算机。如果此文件的大小大于0(这意味着发现错误),我将在此处执行一些逻辑,例如发送电子邮件。问题是这个脚本每次都会发送电子邮件,即使日志只包含1个错误。

所以,我想要做的是检查我的电脑中的文件是否大于上一次的大小。我需要在批处理或java中执行此操作。

1 个答案:

答案 0 :(得分:1)

通过将文件大小和/或上次修改时间保存到另一个文件中,可以比较自上次检查以来文件大小或文件的上次修改日期,并将实际文件大小/上次修改日期与附加中保存的字符串进行比较文件。

但为此目的更容易使用的是归档属性,如果修改了文件,则会自动设置该属性。所以要做的就是在处理完文件中的数据后从文件中删除存档属性,如果由于文件修改而再次设置存档属性,则检查下一步。

以下是一个示例代码:

@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开头,如果是否为文件设置了存档属性或任何其他属性,则输出行为空格。

带有选项findstr.exe/B的Windows标准应用/L在行的开头搜索A,如果找到则以退出代码0终止。但是如果输出来自attrib.exe的行不以A开头,findstr.exe的返回值为1分配给环境变量 ERRORLEVEL ,这意味着归档属性未设置在文件中因此,自上次检查后文件未被修改。