繁体   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