chgs2011
Goto Top

Vbscript batch bei änderung ausführen

Hallo,

ich habe ein Batch-File, das mir einige Arbeiten erleichtert.

Ich möchte aber das Batch-File nicht im Minutentakt antriggern, sondern soll erst angetriggert werden, sobald sich die Datei XYZ ändert. Wie es mir scheint, klappt das mit Batch alleine nicht, ich muss das über VBScript lösen.

Kennt jemand eine Lösung, um eine Dateiänderung zu erfassen, um das Batch anzutriggern?

Danke

Content-ID: 250145

Url: https://administrator.de/forum/vbscript-batch-bei-aenderung-ausfuehren-250145.html

Ausgedruckt am: 23.12.2024 um 05:12 Uhr

colinardo
colinardo 25.09.2014 aktualisiert um 15:15:05 Uhr
Goto Top
Moin chgs2011,
kein Problem:
(Zur Erläuterung wie das Script zu handhaben ist, gibt es am Anfang eine Meldung via MsgBox aus, die du wenn du die Handhabung verstanden hast, entfernen kannst)

WICHTIG: Das Script kann nur lokale Laufwerke überwachen. D.h wenn man eine Datei im Netz überwachen möchte, muss der Pfad als Laufwerk gemappt sein, und der Pfad mit dem Laufwerksbuchstaben angegeben werden.
'Pfad der zu überwachen ist  
strFile = "D:\Daten\datei.csv"  
' Auszuführende Batch  
strBatch = "C:\Pfad\deineBatch.cmd"   
'Abfrage der aufgelaufenen Events in Sekunden  
intInterval = 2
'------------------------------  
MsgBox "Das Programm überwacht nach klicken auf OK die Datei: '" & strFile & "' alle " & intInterval & " Sekunden auf aufgelaufene Änderungen'" & vbNewLine & "(Um das Programm zu beenden muss der Prozess 'wscript.exe' im Taskmanager beendet werden)",vbInformation  
'Objekte erzeugen  
Set fso = WScript.CreateObject("Scripting.Filesystemobject")  
Set objShell = CreateObject("Wscript.Shell")  
Set objWMIService = GetObject( "winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2" )  

'Backslashes im Pfad für WQL Query verdoppeln  
strFilePath = Replace(strFile,"\","\\")  

'WQL Query erzeugen  
strQuery = "Select * From __InstanceModificationEvent" _  
    & " Within " & intInterval _  
    & " Where Targetinstance Isa 'CIM_DataFile'" _  
    & " And TargetInstance.Name='" & strFilePath & "'"  
'Eventsink registrieren  
Set colEvents = objWMIService.ExecNotificationQuery (strQuery) 

'Auf Änderungen warten  
Do 
	Set objEvent = colEvents.NextEvent()
    Set objTargetInst = objEvent.TargetInstance
    'Bei Bedarf lässt sich hier auf die Eigenschaften der Datei zugreifen  
    'die möglichen Eigenschaften kann man hier nachlesen:   
    ' http://msdn.microsoft.com/en-us/library/aa387236%28v=vs.85%29.aspx  
    ' Beispiel Dateigröße: objTargetInst.FileSize  

    On Error Resume Next

    'Bei Dateiänderung Batch aufrufen -------------------  
    objShell.Run "cmd /c """ & strBatch & """"  
    '-----------------------------------------------------  
Loop
Grüße Uwe