Board logo

标题: vbs监控文件的代码求教 [打印本页]

作者: zerocq     时间: 2008-2-11 12:44    标题: vbs监控文件的代码求教
public lastchange,fso,f,WshShell filespec="记录.txt" Set WshShell = WScript.CreateObject("WScript.Shell") Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFile(filespec) lastchange=f.DateLastModified msgbox "文件最后修改时间:"&lastchange&vbcrlf&"现在开始监控文件....." for i=1 to 10000000 call check() next msgbox "程序结束" function check() getnow=f.DateLastModified if datediff("s",lastchange,getnow)<>0 then WshShell.Run "autos.bat",0,true wscript.sleep 1000 lastchange=f.DateLastModified end if wscript.sleep 1000 end function 以上是一个监视文件是否改动的vbs脚本 通过监视文件的最后修改时间和上次记录的时间作比较,如果时间不同则说明文件发生变化 但求各位帮忙添加一个功能 如何实现X小时后如果文件没有变化则运行某程序

作者: ywjco     时间: 2008-2-12 14:13
DateDiff 函数的第一个参数有"s"和 "h"的选项,可以满足测试秒和小时。我根据你的代码稍作修改。假设如果X小时后文件没有变化则运行Xhours_autos.bat。 另:你的子函数没有返回值,可改为SUB。 ********************************************************* public lastchange,fso,f,WshShell,blnYes Const Xhours=5 Const filespec="记录.txt" Set WshShell = WScript.CreateObject("WScript.Shell") Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFile(filespec) lastchange=f.DateLastModified msgbox "文件最后修改时间:"&lastchange&vbcrlf&"现在开始监控文件....." blnYes=TRUE Do While blnYes getnow=f.DateLastModified checkLastTime(getnow) wscript.sleep 1000 Loop msgbox "程序结束" Set WshShell =Nothing Set fso = Nothing Set f = Nothing '- - - - - - - - - - - - -- - - - - - - - - Sub checkLastTime(NowTime) '监视文件是否改动,如果X小时后文件没有变化则运行Xhours_autos.bat If datediff("s",lastchange,NowTime)<>0 Then WshShell.Run "autos.bat",0,true wscript.sleep 1000 lastchange=f.DateLastModified End If Hours=datediff("h",lastchange,NowTime) If Hours=Xhours Then WshShell.Run "Xhours_autos.bat",0,true wscript.sleep 1000 lastchange=f.DateLastModified If MsgBox("你是否要继续监控文件?",,vbYesNo)=vbNo Then blnYes=FALSE End If End If End Sub **************************************************** 我自己没有经测试。