Logging 批处理文件以检查日志文件的md5sum
我需要一些帮助来创建服务应用程序批处理文件 简而言之,应用程序将检查文件夹中是否有任何新文件,如果有,将写入日志文件(Logging 批处理文件以检查日志文件的md5sum,logging,batch-file,md5,md5sum,Logging,Batch File,Md5,Md5sum,我需要一些帮助来创建服务应用程序批处理文件 简而言之,应用程序将检查文件夹中是否有任何新文件,如果有,将写入日志文件(Results.txt) 问题是,如果在24小时内文件夹中没有“结果”,通常会出现问题。(要么是服务崩溃了,要么是网络出现问题。)因此我需要编写一个批处理脚本,检查Results.txt文件在过去24小时内是否发生了更改 我的计划是每24小时运行一个批处理文件,检查Results.txt的md5sum,看看它是否发生了变化。然而,我不知道该怎么做。在伪代码中,它将如下所示: if
Results.txt
)
问题是,如果在24小时内文件夹中没有“结果”,通常会出现问题。(要么是服务崩溃了,要么是网络出现问题。)因此我需要编写一个批处理脚本,检查Results.txt
文件在过去24小时内是否发生了更改
我的计划是每24小时运行一个批处理文件,检查Results.txt
的md5sum,看看它是否发生了变化。然而,我不知道该怎么做。在伪代码中,它将如下所示:
if not exist old.txt echo. > old.txt & fc "md5.txt" "old.txt"
%md5sum% Results.txt > md5.txt
set equal=no
if md5.txt==old.txt set equal=yes
if equal=no echo No results found in 24 hours >> log.txt
简单点怎么样?没有花哨的MD5,只有
dir
命令的输出!这是因为,如果正在检查的目录中没有任何更改,则无论何时运行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
如果要隐藏批处理脚本的所有输出,只需在fc
行后面插入一个>nul
更新:
根据提供的新信息
因此,您只需要检查Results.txt文件的最后写入时间戳。只要在没有更改和更新时间戳的情况下不写入文件
甚至更好的是,如果您只关心文件夹中是否有任何活动,只需检查该文件夹的“上次写入”时间戳。如果时间戳早于24小时,您可以处理24小时内未找到的结果
使用/t:w
选项和dir
命令,您可以解析所需的时间戳
TLDR:亲吻
更新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
这会将目录中的文件与当前日期进行比较,如果它们早于当前日期,则会告诉您哪些文件是新的(不一定需要),如果没有新文件,则会记录 如果您在一天结束时使用计划任务运行此功能,那么它应该可以正常工作
cd yourdir
forfiles /d +%date% /s /c "cmd /c echo @file is new" 2>nul
if %errorlevel%==1 echo No results found in 24 hours >>log.txt
不确定这是否正是我想要的。我需要它来检查文件Results.txt,看看它是否在24小时内而不是目录中发生了变化。这是因为文件可以不断地从文件夹中添加和删除。如果脚本在一天开始时发现没有文件,并且一整天都在添加和删除文件,但第二天文件夹为空,那么它将显示24小时内没有任何更改。这就是为什么我每5分钟要检查一个脚本(使用dir)并在发生更改时写入时间和日期,并且需要另一个脚本来检查此文件是否在24小时内发生了更改谢谢David,这似乎非常适合我的需要。我不知道如何解析这些信息并进行检查。只是为了澄清,我需要对照当前时间/日期检查上次修改的时间/日期,如果差异超过24小时,我需要将其回显到日志文件中。我玩过dir/t:w,但我不知道如何选择我想要的文件夹的时间和日期,或者如何对照当前日期检查它@AlexPowell我添加了第二个更新,提供了一个如何解析信息的示例和一个利用解析的简单答案脚本。谢谢!这太棒了。感谢您展示它是如何工作的,对未来的项目非常有用
cd yourdir
forfiles /d +%date% /s /c "cmd /c echo @file is new" 2>nul
if %errorlevel%==1 echo No results found in 24 hours >>log.txt