【发布时间】:2014-04-07 07:12:16
【问题描述】:
文件夹每分钟更新一次新的文件内容。
如果检测到受监控文件夹的内容在过去五分钟内没有更新,则需要发出简单的警报(例如启动回显)。
例如,
监控 c:\monitoredFiles if (c:\monitoredFiles 5 分钟内没有更新) {start echo 'System Malfunction Detected'}
【问题讨论】:
标签: file batch-file updates
文件夹每分钟更新一次新的文件内容。
如果检测到受监控文件夹的内容在过去五分钟内没有更新,则需要发出简单的警报(例如启动回显)。
例如,
监控 c:\monitoredFiles if (c:\monitoredFiles 5 分钟内没有更新) {start echo 'System Malfunction Detected'}
【问题讨论】:
标签: file batch-file updates
谢谢。我使用了您的脚本,但我不得不对其进行一些更改,因为它不适用于不同的语言。 我的修改版本适用于德语 Windows 版本,每 600 秒检查一次文件夹。如果没有更改,它会触发 ifttt.com 上的通知,导致我的手机发出哔哔声,因此我知道填充文件夹的应用程序一定已经崩溃。 看门狗还保存临时文件,以便我知道上次检查的时间以及每个步骤的差异。
echo off
REM Start monitoring C:\Temp\test\tobewatched
REM Goto our "working area"
C:
CD \watchdog
REM Generate initial listing
dir C:\Temp\test\tobewatched\ | FINDSTR /v (se) > old.tmp
:TOP
dir C:\Temp\test\tobewatched\ | FINDSTR /v (se) > new.tmp
fc new.tmp old.tmp
echo %errorlevel%
if errorlevel 1 goto ok
REM Keine Aenderung in 600 Sekunden --> Alarm
curl -X POST https://maker.ifttt.com/trigger/notify/with/key/<youriftttkeygoeshere>
:ok
for %%F in (new.tmp) do set file=%%~fF
for /f "tokens=2 delims==" %%I in ('wmic datafile where name^="%file:\=\\%" get lastmodified /format:list') do set datetime=%%I
set datetime=%datetime:~0,14%
copy new.tmp comp%datetime%.txt
del old.tmp 2> nul
ren new.tmp old.tmp
@ping -n 600 localhost> nul
GOTO TOP
【讨论】:
dir |findstr /VBC:" " 保持国际化(删除以空格开头的行,从而删除标题和摘要行)
此脚本获取最新文件并检查它是否超过 5 分钟。
它只会将一条消息回显到屏幕 atm。
您可以像这样在循环中使用另一个脚本启动它 - 它每分钟运行一次:
@echo off
:loop
call "checkfolder.bat"
timeout /t 60 /nobreak
goto :loop
这里是“checkfolder.bat”
@echo off
:: Wmic removes regional differences
:: XP Pro can have some filename errors due to the short filename bug
setlocal
:: set the number of minutes in the following line
set minutes=5
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"
set "stamp=%YYYY% %MM% %DD% %HH% %Min%"
call :DateToMinutes %stamp% NowMins
set "name="
for /f "delims=" %%a in ('dir * /a-d /b /od ^|find /v /i "%~nx0"') do set "name=%%a"
if defined name call :CheckMins "%name%"
if %MinsOld% gtr %minutes% echo Folder hasn't been modified in %minutes% minutes & pause
goto :EOF
:CheckMins
set "filestamp="
set "filemins="
set "MinsOld="
set "YY=" & set "YYYY=" & set "MM=" & set "DD="
set "HH=" & set "Min=" & set "Sec=" & set "dt="
set "file=%~sf1"
:: can use CreationDate instead of lastmodified
WMIC DATAFILE WHERE name="%file:\=\\%" get lastmodified | find "." >file.tmp
for /f %%a in (file.tmp) do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"
set "filestamp=%YYYY% %MM% %DD% %HH% %Min%"
del file.tmp 2>nul
if not defined yyyy goto :EOF
call :DateToMinutes %filestamp% FileMins
set /a MinsOld=%NowMins%-%FileMins%
goto :EOF
:DateToMinutes
setlocal
set yy=%1&set mm=%2&set dd=%3&set hh=%4&set nn=%5
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
if 1%hh% LSS 20 set hh=0%hh%
if /i {%nn:~2,1%} EQU {p} if "%hh%" NEQ "12" set hh=1%hh%&set/a hh-=88
if /i {%nn:~2,1%} EQU {a} if "%hh%" EQU "12" set hh=00
if /i {%nn:~2,1%} GEQ {a} set nn=%nn:~0,2%
set /a hh=100%hh%%%100,nn=100%nn%%%100,j=j*1440+hh*60+nn
endlocal&set %6=%j%&goto :EOF
【讨论】:
这是我整理的又快又脏的东西。它基本上创建了文件夹 G: 的目录列表(因为这是我拥有的,您可以更改它)并将其保存在 C: 中(您可以将其保存在其他地方)。然后每 10 秒生成一个新目录列表,并使用 FC(文件比较)将其与旧目录列表进行比较。如果它们没有改变,它会输出一条消息。您可以使用不同的技术输出不同的消息。
@echo off
REM Start monitoring G:\
REM Goto our "working area"
C:
CD \
REM Generate initial listing
dir G:\ | FINDSTR /v (s) > old.tmp
:TOP
dir G:\ | FINDSTR /v (s) > new.tmp
fc new.tmp old.tmp > nul
if errorlevel 1 goto ok
echo No changes detected
:ok
del old.tmp 2> nul
ren new.tmp old.tmp
SLEEP 10
GOTO TOP
FINDSTR 部分抑制 DIR 列表底部的两行,以便文件系统中其他地方更改可用空间的更改不会影响此程序。它搜索并删除包含 (s) 的 (/V) 行,即末尾有 50 个文件和 5 个目录的那两行。
05/03/2014 10:23 845 z
14/02/2014 10:16 94 z.html
50 File(s) 75,284,594 bytes
5 Dir(s) 202,621,149,184 bytes free
请注意,我一开始就将目录更改为C:\,因为我不想写在我正在监视的目录中,否则我会导致它自己更改。显然你可以编写你的版本来在任何你喜欢的地方生成它的文件——我只是有点喜欢 C:\ 因为它很可能存在。
【讨论】: