在文件名更改时触发一些vbs代码

时间:2017-05-18 18:55:28

标签: vbscript

我希望能够在文件名更改时运行一些自定义vb脚本代码(例如,保留新创建的文件列表或更改其名称的文件)。 应该在指定文件夹中发生的每个文件名更改时调用vbs。

我知道如何使用完整目录扫描,但我想找到一个更有效的方法,例如通过调用我的代码的OS钩子的意思。

有什么办法吗?

谢谢你, 甲

1 个答案:

答案 0 :(得分:0)

有两个简单的WMI示例,跟踪*.txt文件夹中C:\Test\个文件的更改。

第一个用于同步事件处理:

Option Explicit

Dim oWMIService, oEvents, s

Set oWMIService = GetObject("WinMgmts:\\.\root\CIMv2")
Set oEvents = oWMIService.ExecNotificationQuery( _
    "SELECT * FROM __InstanceOperationEvent " & _
    "WITHIN 1 WHERE " & _
    "TargetInstance ISA 'CIM_DataFile' AND " & _
    "TargetInstance.Drive = 'C:' AND " & _
    "TargetInstance.Extension = 'txt' AND " & _
    "TargetInstance.Path = '\\Test\\'")
Do
    With oEvents.NextEvent()
        s = "Event: " & .Path_.Class & vbCrLf
        With .TargetInstance
            s = s & "Name: " & .Name & vbCrLf
            s = s & "File Size: " & .FileSize & vbCrLf
            s = s & "Creation Date: " & .CreationDate & vbCrLf
            s = s & "Last Modified: " & .LastModified & vbCrLf
            s = s & "Last Accessed: " & .LastAccessed & vbCrLf
        End With
        If .Path_.Class = "__InstanceModificationEvent" Then
            With .PreviousInstance
                s = s & "Previous" & vbCrLf
                s = s & "File Size: " & .FileSize & vbCrLf
                s = s & "Last Modified: " & .LastModified & vbCrLf
            End With
        End If
    End With
    WScript.Echo s
Loop

第二个用于异步事件处理:

Option Explicit

Dim oWMIService, oSink

Set oWMIService = GetObject("WinMgmts:\\.\root\CIMv2")
Set oSink = WScript.CreateObject("WbemScripting.SWbemSink", "Sink_")
oWMIService.ExecNotificationQueryAsync oSink, _
    "SELECT * FROM __InstanceOperationEvent " & _
    "WITHIN 1 WHERE " & _
    "TargetInstance ISA 'CIM_DataFile' AND " & _
    "TargetInstance.Drive = 'C:' AND " & _
    "TargetInstance.Extension = 'txt' AND " & _
    "TargetInstance.Path = '\\Test\\'"
Do
    WScript.Sleep 1000
Loop

Sub Sink_OnObjectReady(oEvent, oContext)

    Dim s

    With oEvent
        s = "Event: " & .Path_.Class & vbCrLf
        With .TargetInstance
            s = s & "Name: " & .Name & vbCrLf
            s = s & "File Size: " & .FileSize & vbCrLf
            s = s & "Creation Date: " & .CreationDate & vbCrLf
            s = s & "Last Modified: " & .LastModified & vbCrLf
            s = s & "Last Accessed: " & .LastAccessed & vbCrLf
        End With
        If .Path_.Class = "__InstanceModificationEvent" Then
            With .PreviousInstance
                s = s & "Previous" & vbCrLf
                s = s & "File Size: " & .FileSize & vbCrLf
                s = s & "Last Modified: " & .LastModified & vbCrLf
            End With
        End If
    End With
    WScript.Echo s

End Sub

CIM_DataFile可以找到text-align个实例属性的更多信息。