Ordner-Überwachung per Skript
Hallo,
hat jemand zufällig eine schnelle Lösung per vbs oder Batch parat, mit der ich überwachen kann, dass bestimmte Dateitypen nicht länger als eine maximale Zeit (z.B. 15 Minuten) in einem Ordner liegen bleiben. (Ist der temporäre Ordner eines POP3-Connectors, in dem die *.msg-Dateien kurz landen. Wenn sie länger darin liegen bleiben stimmt etwas nicht. Hier geht`s aber um Fristen.)
Torsten
[Edit Biber] 14.5.2008
Der Beitrag ist mittlerweile "fertig" und als gelöst markiert.
So, wie er sich entwickelt hat, verschiebe ich ihn mal von "Betriebssysteme" mach "Batch & Shell" zu den anderen Skripting-Lösungen und ändere den Titel in "Ordner-Überwachung per Skript".
[/Edit]
hat jemand zufällig eine schnelle Lösung per vbs oder Batch parat, mit der ich überwachen kann, dass bestimmte Dateitypen nicht länger als eine maximale Zeit (z.B. 15 Minuten) in einem Ordner liegen bleiben. (Ist der temporäre Ordner eines POP3-Connectors, in dem die *.msg-Dateien kurz landen. Wenn sie länger darin liegen bleiben stimmt etwas nicht. Hier geht`s aber um Fristen.)
Torsten
[Edit Biber] 14.5.2008
Der Beitrag ist mittlerweile "fertig" und als gelöst markiert.
So, wie er sich entwickelt hat, verschiebe ich ihn mal von "Betriebssysteme" mach "Batch & Shell" zu den anderen Skripting-Lösungen und ändere den Titel in "Ordner-Überwachung per Skript".
[/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 87283
Url: https://administrator.de/forum/ordner-ueberwachung-per-skript-87283.html
Ausgedruckt am: 26.12.2024 um 13:12 Uhr
11 Kommentare
Neuester Kommentar
lese Beitrag -> denke drüber nach -> if FrageVerstanden = True then Antworten Else: Close
Torsten möchte nicht wissen, wie man Dateitypen verbietet, sondern wie man einen Ordner überwacht
@Torsten
welcher Pop3-Connector ist es denn? hat der vielleicht noch zusätzliuche Funktionen, die man zur Überwachung nutzen könnte?
Torsten möchte nicht wissen, wie man Dateitypen verbietet, sondern wie man einen Ordner überwacht
@Torsten
welcher Pop3-Connector ist es denn? hat der vielleicht noch zusätzliuche Funktionen, die man zur Überwachung nutzen könnte?
Hallo TorstenB!
Versuch es damit:
Den Pfad für die auszuführende Batchdatei habe ich aus Gründen der Übersichtlichkeit ebenfalls (am Anfang des Scripts) einer Variablen zugewiesen.
Grüße
bastla
P.S.: Wenn Du das nächste Mal ein Script postest, bitte anstelle von "Anfang !!!" und "Ende !!!" < code> und < /code> (natürlich ohne Leerzeichen) verwenden ...
Versuch es damit:
' Ordnerüberwachung:
' Verzeichnis, in dem die Dateien protokolliert werden sollen
LOGDIR = "C:\Programme\POPcon\"
' Dateien, die gesucht werden sollen
FILEMASK = "*.msg"
' Diese temporäre Datei wird für den Vergleich benötigt. Das Script muss im verwendeten Verzeichnis Schreibrechte haben.
DIRFILE = "C:\Programme\POPcon\Log.txt"
'Diesen Batch ausführen, wenn mindesten eine alte Datei gefunden wird
BATCH = "C:\Batch.cmd"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")
'Alte Liste aus DIRFILE in Array Zeile0() einlesen
If objFSO.FileExists(DIRFILE) Then 'DIRFILE vorhanden
Set objDirFile = objFSO.OpenTextFile(DIRFILE, 1)
If Not objDirFile.AtEndOfStream Then 'DIRFILE nicht leer
strZeile0 = objDirFile.ReadAll
Else
strZeile0 = ""
End If 'DIRFILE nicht leer
Else
strZeile0 = ""
End If 'DIRFILE vorhanden
' Alle Dateien aus dem Ordner sortiert in das Array Zeile1() einlesen
strCMD = objShell.ExpandEnvironmentStrings("%ComSpec%") & " /c dir " & LOGDIR & "\" & FILEMASK & " /b /od /a-d 2>nul"
strZeile1 = objShell.Exec(strCMD).StdOut.ReadAll
Zeile1 = Split(strZeile1, vbCrLF)
' Am Ende der Ausführung aktuelle Dateiliste in DIRFILE speichern
objFSO.OpenTextFile(DIRFILE, 2, True).Write strZeile1
' *
' Dateivergleich zwischen Content.txt (Zeile0) und aktueller Liste (Zeile1)
' *
If LCase(Trim(strZeile0)) <> LCase(Trim(strZeile1)) Then 'Dateiliste hat sich verändert
strZeile0 = vbCrLF & strZeile0 'jeder Eintrag ist jetzt von vbCrLF umgeben und kann entsprechend gesucht werden
For i = 0 To UBound(Zeile1)
If InStr(1, strZeile0, vbCrLF & Zeile1(i) & vbCrLF, vbTextCompare) Then
'noch vorhanden
'Batch-Datei an Eingabeaufforderung übergeben
objShell.Run "cmd.exe /c " & BATCH , 0, True
'weitere Überprüfung nicht erforderlich
Exit For
End If
Next
Else 'Dateiliste unverändert
'Batch-Datei an Eingabeaufforderung übergeben
objShell.Run "cmd.exe /c " & BATCH , 0, True
End If
Grüße
bastla
P.S.: Wenn Du das nächste Mal ein Script postest, bitte anstelle von "Anfang !!!" und "Ende !!!" < code> und < /code> (natürlich ohne Leerzeichen) verwenden ...
Hallo TorstenB!
Füge testweise die Zeilen
vor "If LCase ..." ein und starte das Script von der Kommandozeile mit
Die Zahl nach "Alt" bzw "Neu" gibt die Zeichenanzahl der beiden Inhaltsverzeichnisse an und sollte bei zweimaligem Durchlauf den selben Wert haben; ebenso müssten die angezeigten Dateilisten übereinstimmen.
Zusätzlich kannst Du noch den Batchstart mit folgender Zeile (jeweils unmittelbar vor "objShell.Run..." platzieren) dokumentieren:
Grüße
bastla
Füge testweise die Zeilen
WScript.Echo "Alt (" & Len(Trim(strZeile0)) & "): " & vbCrLF & strZeile0
WScript.Echo "Neu (" & Len(Trim(strZeile1)) & "): " & vbCrLF & strZeile1
cscript //nologo "PfadZuDeinemScript"
Zusätzlich kannst Du noch den Batchstart mit folgender Zeile (jeweils unmittelbar vor "objShell.Run..." platzieren) dokumentieren:
WScript.Echo "Starte """ & BATCH & """"
Grüße
bastla
Hallo TorstenB!
Einfach in den letzten Teil noch eine Abfrage rein:
Alternativ dazu könntest Du auch schon vor dem If LCase ... mit
bei aktuell leerem Ordner gleich das Script beenden.
Grüß
bastla
Einfach in den letzten Teil noch eine Abfrage rein:
Else 'Dateiliste unverändert
'Batch-Datei an Eingabeaufforderung übergeben
If Trim(strZeile1) <> "" Then objShell.Run "cmd.exe /c " & BATCH , 0, True
End If
If Trim(strZeile1) = "" Then WScript.Quit
Grüß
bastla
Hallo TorstenB!
Vielleicht könntest Du dann noch Deinen hier geposteten Parallelbeitrag in einen Hinweis auf diesen Thread verwandeln ...
Grüße
bastla
Vielleicht könntest Du dann noch Deinen hier geposteten Parallelbeitrag in einen Hinweis auf diesen Thread verwandeln ...
Grüße
bastla