gpt4 book ai didi

java - 如何检查文件的大小是否从上次批量或java中修改过?

转载 作者:太空宇宙 更新时间:2023-11-04 06:39:14 24 4
gpt4 key购买 nike

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

所以,我想做的是检查我的计算机中的文件的大小是否大于上次的大小。我需要批量或在 java 中执行此操作。

最佳答案

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

但更容易用于此目的的是存档属性,如果文件被修改,该属性总是自动设置。因此,所要做的就是在处理文件中的数据后从文件中删除存档属性,然后检查存档属性是否因文件修改而再次设置。

这里是一个示例代码:

@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 这意味着未在文件上设置存档属性,因此自上次检查以来该文件没有被修改。

关于java - 如何检查文件的大小是否从上次批量或java中修改过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24909443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com