我正在使用下面的代码来捕获在目录中创建的文件:
strComputer = "." strQueryFolder = Replace(strFolder,"\","\\\\") Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colMonitoredEvents = objWMIService.ExecNotificationQuery ("SELECT * FROM __InstanceCreationEvent WITHIN " & nFrequency & " WHERE Targetinstance ISA 'CIM_DirectoryContainsFile' and TargetInstance.GroupComponent='Win32_Directory.Name=""" & strQueryFolder & """'") Do Set objLatestEvent = colMonitoredEvents.NextEvent strNewFile = objLatestEvent.TargetInstance.PartComponent arrNewFile = Split(strNewFile,"=") strFilePath = arrNewFile(1) strFilePath = Replace(strFilePath,"\\","\") strFilePath = Replace(strFilePath,Chr(34),"") strFileName = Replace(strFilePath,strFolder,"") strTempFilePath = WScript.CreateObject("Scripting.FileSystemObject").GetSpecialFolder(2) & "\TEMP.M4A" 'Do something with strTempFilePath Loop
如何识别写文件的完成情况?
我记得我做过这样的Vbscript,你可以看看这段代码
我希望这可以帮助你并给你更多的想法.
Option Explicit Dim fso,Message,Message2,Msg,intInterval,strDrive,strComputer,objWMIService,strQuery Dim colEvents,objEvent,objTargetInst,objPrevInst,objProperty,ws,LOG_FILE_PATH,LogFile,Chemin,MonTableau Set fso = CreateObject("Scripting.FileSystemObject") Set ws = CreateObject("WScript.Shell") strComputer = "." Chemin = Parcourir_Dossier() MonTableau = Split(Chemin,"\") LogFile = MonTableau(UBound(MonTableau)) & ".log" LOG_FILE_Path = ws.ExpandEnvironmentStrings("%AppData%") & "\" & LogFile intInterval = "2" '**************************************************************************************************** Function Parcourir_Dossier() Dim ws,objFolder,Copyright Copyright = "[ © Hackoo © 2014 ]" Set ws = CreateObject("Shell.Application") Set objFolder = ws.BrowseForFolder(0,"Choose the folder to watch for "_ & Copyright,1,"c:\Programs") If objFolder Is Nothing Then Wscript.Quit End If Parcourir_Dossier = objFolder.self.path end Function '**************************************************************************************************** Chemin = Split(fso.GetAbsolutePathName(Chemin),":") strDrive = Chemin(0) & ":" strFolder = Replace(Chemin(1),"\\") If Right(strFolder,2) <> "\\" Then strFolder = strFolder & "\\" 'Connexion au WMI Set objWMIService = GetObject( "winmgmts:" &_ "{impersonationLevel=impersonate}!\\" &_ strComputer & "\root\cimv2" ) 'La chaîne de la requête strQuery = _ "Select * From __InstanceOperationEvent" _ & " Within " & intInterval _ & " Where Targetinstance Isa 'CIM_DataFile'" _ & " And TargetInstance.Drive='" & strDrive & "'"_ & " And TargetInstance.path='" & strFolder & "'" 'Exécutez la requête Set colEvents = _ objWMIService.ExecNotificationQuery(strQuery) Do Set objEvent = colEvents.NextEvent() Set objTargetInst = objEvent.TargetInstance Select Case objEvent.path_.Class 'Si c'est le cas de la création de fichier ou d'un événement de suppression et afficher 'juste le nom du fichier Case "__InstanceCreationEvent" Message = DblQuote(objTargetInst.Name) & " is created !" Message2 = String(10,"*") & Now & String(10,"*") & vbCrLf & Message & vbCrLf & String(70,"*") Call Log(LOG_FILE_Path,Message2) 'MsgBox Message2,VbInformation,Message Case "__InstanceDeletionEvent" Message = DblQuote(objTargetInst.Name) & " is deleted !" Message2 = String(10,Message 'Si c'est le cas de la modification du fichier,comparer les valeurs de propriété de la cible et de l'instance précédente 'et afficher les propriétés qui ont été changé comme la taille et LastModified Case "__InstanceModificationEvent" Set objPrevInst = objEvent.PrevIoUsInstance For Each objProperty In objTargetInst.Properties_ If objProperty.Value <> _ objPrevInst.Properties_(objProperty.Name) Then Message = "modified file : " & vbCrLf &_ objTargetInst.Name & vbCrLf &_ "Property : "_ & objProperty.Name & vbCrLf &_ "Last Value : "_ & objPrevInst.Properties_(objProperty.Name) & vbCrLf &_ "New value : " _ & objProperty.Value Message2 = String(10,"*") Call Log(LOG_FILE_Path,Message2) 'MsgBox Message,64,DblQuote(objTargetInst.Name) End If Next End Select Loop '********************************************************************************************** Function DblQuote(Str) DblQuote = Chr(34) & Str & Chr(34) End Function '********************************************************************************************** Sub Log(strLogFileChemin,strLogContent) Const APPEND = 8 Dim objFso,objLogFile Set objFso = CreateObject("Scripting.FileSystemObject") If Not objFso.FileExists(strLogFileChemin) Then objFso.CreateTextFile(strLogFileChemin,True).Close Set objLogFile = objFso.OpenTextFile(strLogFileChemin,APPEND) objLogFile.WriteLine strLogContent objLogFile.Close End Sub '**********************************************************************************************