Jam*_*Mry 1 vbscript file batch-file monitor
我需要创建一个批处理脚本,持续监视特定文件的更改,在本例中为LogTest.txt.
文件更新后,它将触发一个VBScript消息框,显示LogTest.txt中的最后一行.这个想法是,在消息框被清除后,这将继续监控.
我尝试过使用该forfiles选项,但这只能让我处理日期而不是时间.我知道PowerShell和其他选项都可用,但由于原因太长而无法解释,我只能使用批处理和VBScript.
批处理文件:
@echo off
:RENEW
forfiles /m LogTest.txt /d 0
if %errorlevel% == 0 (
echo The file was modified today
forfiles /M LogTest.txt /C "cmd /c echo @file @fdate @ftime"
cscript MessageBox.vbs "Error found."
REM do whatever else you need to do
) else (
echo The file has not been modified today
dir /T:W LogTest.txt
REM do whatever else you need to do
)
goto :RENEW
Run Code Online (Sandbox Code Playgroud)
MessageBox.vbs:
Set objArgs = WScript.Arguments
messageText = objArgs(0)
MsgBox "This is an error", vbOkCancel + vbExclamation, "Error Found"
Run Code Online (Sandbox Code Playgroud)
每个文件都有一个归档属性.Windows在对文件的每次写访问时设置此属性.
您可以使用该attrib命令进行设置,并检查它,例如:
@echo off
:loop
timeout -t 1 >nul
for %%i in (LogTest.txt) do echo %%~ai|find "a">nul || goto :loop
echo file was changed
rem do workload
attrib -a LogTest.txt
goto :loop
Run Code Online (Sandbox Code Playgroud)
timeout /t 1 >nul:减少CPU负载的小等待间隔(从不构建没有空闲时间的循环)
for %%i in (logTest.txt) do...处理文件
echo %%~ai打印属性(详见for /?)
|find "a" >nul尝试在前一个输出中找到"a"rchive属性echo,并将任何输出重定向到nirvana(我们不需要它,只需要错误级别)
|| goto :loop作为"如果上一个命令(find)失败,然后再次在标签处:loop"
如果find成功(有是存档属性),那么接下来的行会被处理(echo file was changed...)
attrib -a LogTest.txt 取消设置文件的存档属性.