vbscript从文件夹中获取复制粘贴事件

时间:2015-04-11 13:53:12

标签: vbscript

每次用户将文件粘贴到文件夹时,我都想运行一个vbscript文件。我想抓住那个事件。这可能吗?代码片段请。谢谢!

1 个答案:

答案 0 :(得分:1)

使用Vbscript监控文件夹==> 的 MonitorFolder.vbs 您可以在%AppData%文件夹中找到您的LogFile进行监控,其名称为 NameofYourFolder.log

我希望这个脚本可以帮助你;)

Option Explicit
If AppPrevInstance() Then   
    MsgBox "There is an existing instance !" & VbCrLF & CommandLineLike(WScript.ScriptName),VbExclamation,"There is an existing instance !"   
    WScript.Quit   
Else  
    Call MonitorFolder()
end if
'*****************************************************************************************************
Sub MonitorFolder()
    Dim fso,Message,Message2,Msg,intInterval,strDrive,strFolder,strComputer,objWMIService,strQuery
    Dim colEvents,objEvent,objTargetInst,objPrevInst,objProperty,ws,LOG_FILE_PATH,LogFile,PathFolder,MonTableau
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ws = CreateObject("WScript.Shell")
    strComputer = "." 
    PathFolder = Browse4Folder
    MonTableau = Split(PathFolder,"\")
    LogFile = MonTableau(UBound(MonTableau)) & ".log"
    LOG_FILE_Path = ws.ExpandEnvironmentStrings("%AppData%") & "\" & LogFile
    intInterval = "2"
    PathFolder = Split(fso.GetAbsolutePathName(PathFolder),":")
    strDrive  = PathFolder(0) & ":"
    strFolder = Replace(PathFolder(1), "\", "\\")
    If Right(strFolder, 2) <> "\\" Then strFolder = strFolder & "\\"
'Connecting to WMI
    Set objWMIService = GetObject( "winmgmts:" &_ 
    "{impersonationLevel=impersonate}!\\" &_ 
    strComputer & "\root\cimv2" )
'The query string
    strQuery =  _
    "Select * From __InstanceOperationEvent" _
    & " Within " & intInterval _
    & " Where Targetinstance Isa 'CIM_DataFile'" _
    & " And TargetInstance.Drive='" & strDrive & "'"_
    & " And TargetInstance.path='" & strFolder & "'"
'Run Query
    Set colEvents = _
    objWMIService.ExecNotificationQuery(strQuery)  
    Do 
        Set objEvent = colEvents.NextEvent()
        Set objTargetInst = objEvent.TargetInstance
        Select Case objEvent.path_.Class 
'If this is the case of file creation or deletion event and display just the file name
        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
'If this is the case of the modification of the file, compare the property values of the target and the previous instance
'and view the properties that have been changed as the size and 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
End Sub
'**********************************************************************************************
Sub Log(strLogFilePathFolder,strLogContent)
Const APPEND = 8
Dim objFso,objLogFile
Set objFso = CreateObject("Scripting.FileSystemObject")
If Not objFso.FileExists(strLogFilePathFolder) Then objFso.CreateTextFile(strLogFilePathFolder, True).Close
Set objLogFile = objFso.OpenTextFile(strLogFilePathFolder,APPEND)
objLogFile.WriteLine strLogContent
objLogFile.Close
End Sub 
'****************************************************************************
'Checks whether a script with the same name as this script is already running
Function AppPrevInstance()   
With GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")   
    With .ExecQuery("SELECT * FROM Win32_Process WHERE CommandLine LIKE " & CommandLineLike(WScript.ScriptFullName) & _
        " AND CommandLine LIKE '%WScript%' OR CommandLine LIKE '%cscript%'")   
        AppPrevInstance = (.Count > 1)   
    End With   
End With   
End Function       
'**************************************************************************
Function CommandLineLike(ProcessPath)   
ProcessPath = Replace(ProcessPath, "\", "\\")   
CommandLineLike = "'%" & ProcessPath & "%'"   
End Function
'**************************************************************************
'Function to add the double quotes into a variable
Function DblQuote(Str)
DblQuote = Chr(34) & Str & Chr(34)
End Function
'***************************************************************************
Function Browse4Folder()
Dim ws,objFolder,Copyright
Copyright = "  [ by Hackoo 2015 ]"
Set ws = CreateObject("Shell.Application")
Set objFolder = ws.BrowseForFolder(0,"Choose a folder for monitoring it"_
& Copyright,1,"c:\Programs")
If objFolder Is Nothing Then
    Wscript.Quit
End If
Browse4Folder = objFolder.self.path
end Function
'****************************************************************************