2017-05-18 7 views
2

私は、ファイル名の変更時にいくつかのカスタムVBスクリプトコードを実行できるようにしたいと考えています(たとえば、新しく作成したファイルや名前を変更したファイルのリストを保持するなど)。 vbsは、指定されたフォルダ内で起こったすべてのファイル名変更に対して呼び出される必要があります。ファイル名の変更時にいくつかのvbsコードをトリガーする

私は完全なディレクトリスキャンでこれを行う方法を知っていますが、私のコードを呼び出すOSフックのような意味でより効率的な方法を探したいと思います。

これを行う方法はありますか?

C:\Test\フォルダに *.txtファイルの変更を追跡する、2つの単純なWMIの例があります

+0

何を試しましたか、試したことがどのように失敗しましたか?理想的には、試したことの[最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)を提供し、エラーメッセージやエラーメッセージなどの特定の情報を含めることが理想的です誤った出力。 SOはコード作成サービスではありません。最善の質問は、有益な情報を提供するものであり、回答者が自分の正解を工夫するためのガイドとなり得ることです。 [良い質問をする方法](http://stackoverflow.com/help/how-to-ask)を参照してください。 –

+0

[WMI](https://www.google.ru/search?newwindow=1&q=site%3Astackoverflow.com+%5Bvbs%5D+CIM_DataFile+__InstanceOperationEvent)を試してください – omegastripes

答えて

0

A.、ありがとうございます。

第1は、同期イベント処理のためにある:

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 

目は、非同期イベント処理のためにある:CIM_DataFileインスタンスプロパティの

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 

詳細情報は、あなたがthe link on MSDNで見つけることができます。

+0

ありがとうございました!あなたのスクリプトは正常に動作しています! –

関連する問題