Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 批处理文件以检查日志文件的md5sum_Logging_Batch File_Md5_Md5sum - Fatal编程技术网

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