【问题标题】:Monitoring directory with VB Script使用 VB 脚本监控目录
【发布时间】:2014-08-26 15:24:15
【问题描述】:

我正在使用下面的代码来捕获在目录中创建的文件:

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

问题在于脚本在将文件写入目录时正在捕获文件。

如何识别文件写入完成?

【问题讨论】:

    标签: windows vbscript


    【解决方案1】:

    我记得我是这样写àvbscript的,你可以看看这段代码

    希望能帮到你,给你更多的想法。

    Option Explicit
    Dim fso,Message,Message2,Msg,intInterval,strDrive,strFolder,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,"*") & Now & String(10,"*") & vbCrLf & Message & vbCrLf & String(70,"*")
            Call Log(LOG_FILE_Path,Message2)
            'MsgBox Message2,VbInformation,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,"*") & Now & String(10,"*") & vbCrLf & Message & vbCrLf & String(70,"*")
                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 
    '**********************************************************************************************
    

    【讨论】:

      猜你喜欢
      • 2013-04-13
      • 2014-09-19
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 2013-04-10
      • 1970-01-01
      相关资源
      最近更新 更多