加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 使用VB脚本监视目录

发布时间:2020-12-13 22:58:30 所属栏目:Windows 来源:网络整理
导读:我正在使用下面的代码来捕获在目录中创建的文件: strComputer = "."strQueryFolder = Replace(strFolder,"","\")Set objWMIService = GetObject("winmgmts:" "{impersonationLevel=impersonate}!" strComputer "rootcimv2") Set colMonitoredEvents
我正在使用下面的代码来捕获在目录中创建的文件:
strComputer = "."
strQueryFolder = Replace(strFolder,"","\")
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!" &     strComputer & "rootcimv2") 
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 & "rootcimv2" )
'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 
'**********************************************************************************************

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读