windows – 使用VB脚本监视目录

我正在使用下面的代码来捕获在目录中创建的文件:
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 
'**********************************************************************************************

相关文章

文章浏览阅读2.2k次,点赞6次,收藏20次。在我们平时办公工作...
文章浏览阅读1k次。解决 Windows make command not found 和...
文章浏览阅读3.2k次,点赞2次,收藏6次。2、鼠标依次点击“计...
文章浏览阅读1.3w次。蓝光版属于高清版的一种。BD英文全名是...
文章浏览阅读974次,点赞7次,收藏8次。提供了更强大的功能,...
文章浏览阅读1.4w次,点赞5次,收藏22次。如果使用iterator的...