Mehrere Dateien auf Veränderung überprüfen (Batch - VBS Script)
Hallo
Mein Ziel ist es in einem Ordner mehrere Dateien zu überprüfen, ob diese geändert wurden.
Aktuell habe ich dazu ein Batch und ein vbs Script.
Die Teillösungen habe ich über google auch hier gefunden, nur klappt das Zusammenspiel noch nicht.
Batch Code:
VBS Code:
Mit einem einzelnen File klappt das VBS Script einwandfrei.
Nur wenn ich dann über die Batch die Datei auslese und dem Script übergebe, macht er nur ein File und nicht weiter.
Leider habe ich da jetzt zu wenig Ahnung woran das liegt und hoffe das mir hierbei jemand helfen könnte.
Vielen Dank schon mal im voraus.
Mein Ziel ist es in einem Ordner mehrere Dateien zu überprüfen, ob diese geändert wurden.
Aktuell habe ich dazu ein Batch und ein vbs Script.
Die Teillösungen habe ich über google auch hier gefunden, nur klappt das Zusammenspiel noch nicht.
Batch Code:
dir /b c:\tmp\TK\*.cfg >> C:\temp\Cam.txt
for /f %%i in (C:\temp\Cam.txt) do cscript u:\batch\CFG.vbs c:\tmp\tk\%%i
VBS Code:
'CheckUpdated.vbs
'Defaultwerte:
param = WScript.arguments.item(0)
sFile = "& param"
'sFile = "C:\tmp\TK\Test.cfg"
'lInterv = 30000 '30 s
lInterv = 3000'30 s
If WScript.Arguments.Count > 0 Then sFile = WScript.Arguments(0)
If WScript.Arguments.Count > 1 Then lInterv = WScript.Arguments(1)
'MsgBox "Ueberwachung von " & sFile & vbCrLF & "gestartet, Intervall: " & lInterv / 1000 & " Sekunden"
Set fso = CreateObject("Scripting.FileSystemObject")
bRun = True
sTimeStamp = fso.GetFile(sFile).DateLastModified
Do While bRun
Do While fso.GetFile(sFile).DateLastModified = sTimeStamp
WScript.Sleep lInterv
Loop
sTimeStamp = fso.GetFile(sFile).DateLastModified
iRet = MsgBox("Datei " & sFile & " wurde geaendert." , 65, sTimeStamp)
If iRet = vbCancel Then bRun = False
Loop
Msgbox "Ueberwachung von " & sFile & " beendet."
Mit einem einzelnen File klappt das VBS Script einwandfrei.
Nur wenn ich dann über die Batch die Datei auslese und dem Script übergebe, macht er nur ein File und nicht weiter.
Leider habe ich da jetzt zu wenig Ahnung woran das liegt und hoffe das mir hierbei jemand helfen könnte.
Vielen Dank schon mal im voraus.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 648127
Url: https://administrator.de/contentid/648127
Ausgedruckt am: 17.11.2024 um 19:11 Uhr
4 Kommentare
Neuester Kommentar
Kann nicht funktionieren, denn sobald du das VBScript mit dem ersten Dateinamen aufrufst, wird darauf gewartet, dass cscript.exe endet, bevor mit dem nächsten Dateiname weitergemacht wird. Passiert natürlich nicht.
Probier mal mit FileSystemWatcher in PowerShell. Etwa so:
Steffen
Probier mal mit FileSystemWatcher in PowerShell. Etwa so:
Add-Type -AssemblyName PresentationFramework
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "C:\tmp\TK"
$watcher.Filter = "*.cfg"
$watcher.IncludeSubdirectories = $false
$watcher.EnableRaisingEvents = $true
$null = Register-ObjectEvent $watcher "Changed" -Action { [System.Windows.MessageBox]::Show($Event.SourceEventArgs.FullPath, "Geänderte Datei", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Information) }
while ($true) {sleep 5}
Hmm, ja das ist ein bekanntes Problem. Ich habe aber auch noch ein bisschen Vintage Code in meiner Sammlung herumliegen.
VBScript:
Steffen
VBScript:
Option Explicit
Const Path = "C:\tmp\TK"
Const Extension = "cfg"
Const Interval = 5
Dim oWSH, oFSO, oWMI, oEvent, colEvents
Dim sPath, sDrive, sFolder
Set oWSH = CreateObject("WScript.Shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")
oWSH.CurrentDirectory = oFSO.GetParentFolderName(WScript.ScriptFullName)
sPath = oWSH.ExpandEnvironmentStrings(Path)
sPath = oFSO.GetAbsolutePathName(sPath)
If Not oFSO.FolderExists(sPath) Then
MsgBox "Verzeichnis existiert nicht."
WScript.Quit
End If
sDrive = oFSO.GetDriveName(sPath)
sFolder = Replace(Mid(sPath, 3) & "\", "\", "\\", 1, -1, vbTextCompare)
Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colEvents = oWMI.ExecNotificationQuery( _
"SELECT * FROM __InstanceModificationEvent" _
& " WITHIN " & CStr(Interval) _
& " WHERE Targetinstance ISA 'CIM_DataFile'" _
& " AND TargetInstance.Drive='" & sDrive & "'" _
& " AND TargetInstance.Path='" & sFolder & "'")
Do
Set oEvent = colEvents.NextEvent()
If StrComp(oEvent.TargetInstance.Extension , Extension, vbTextCompare) = 0 Then MsgBox "Geänderte Datei" & vbNewLine & oEvent.TargetInstance.Name
Loop
Steffen