Batch Script zum Auswerten einer Logdatei
[Edit] Aus meiner Sicht beantwortet. Biber [/Edit]
Hallo,
ich hoffe ihr könnt mir bei folgendem Problem weiterhelfen.
Ich versuche mit einem CMD-Script zu prüfen ob in eine Logdatei neue Einträge geschrieben werden, mit dem Hintergrund das bei neuen Einträgen eine Mail versendet werden soll.
Das Script soll minütlich diese Logdatei pollen.
Mein Lösungsansatz ist die Einträge in der Logdatei zu zählen um dann bei einer Abweichung des Zählerstandes die Mailbenachrichtigung auszulösen.
Dazu verwende ich folgenden Befehl in dem Script:
FOR /F "delims=" %%A IN (D:\TEST\tmp1.txt) DO SET /A COUNTER=%COUNTER% + 1
Jedoch zählt er nicht nach jeder Zeile den Counter um 1 hoch sondern erst wenn er alle Einträge in der Logfile durchlaufen hat... wie müsste der Befel lauten damit er jede Zeile zählt???
Bin auch für andere Lösungsansätze offen.
Gruß,
Michael
Hallo,
ich hoffe ihr könnt mir bei folgendem Problem weiterhelfen.
Ich versuche mit einem CMD-Script zu prüfen ob in eine Logdatei neue Einträge geschrieben werden, mit dem Hintergrund das bei neuen Einträgen eine Mail versendet werden soll.
Das Script soll minütlich diese Logdatei pollen.
Mein Lösungsansatz ist die Einträge in der Logdatei zu zählen um dann bei einer Abweichung des Zählerstandes die Mailbenachrichtigung auszulösen.
Dazu verwende ich folgenden Befehl in dem Script:
FOR /F "delims=" %%A IN (D:\TEST\tmp1.txt) DO SET /A COUNTER=%COUNTER% + 1
Jedoch zählt er nicht nach jeder Zeile den Counter um 1 hoch sondern erst wenn er alle Einträge in der Logfile durchlaufen hat... wie müsste der Befel lauten damit er jede Zeile zählt???
Bin auch für andere Lösungsansätze offen.
Gruß,
Michael
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 22401
Url: https://administrator.de/forum/batch-script-zum-auswerten-einer-logdatei-22401.html
Ausgedruckt am: 15.03.2025 um 10:03 Uhr
4 Kommentare
Neuester Kommentar
Moin Micha1982,
drei Möglichkeiten wüßte ich, wahrscheinlich gibt es noch ein paar mehr.
a) Die einfachste (und undokumentierteste):
Set /A "Counter=0"
FOR /F "delims=" %%A IN (DeineDatei) DO SET /A "COUNTER+=1"
Die beiden dokumentierten (na ja, für M$-Verhältnisse dokumentierten):
b)
...
Setlocal enableDelayedExpansion
Set /A "Counter=0"
FOR /F "delims=" %%A IN (DeineDatei) DO SET /A "COUNTER=!Counter!+1"
Setlocal disableDelayedExpansion
...
c)
...
Set /A "Counter=0"
FOR /F "delims=" %%A IN (DeineDatei) DO call :aMiniSub
:aMiniSub
SET /A "COUNTER=%Counter%+1"
goto :eof
...
Ich denke, alle 3 Möglichkeiten sind auch im Bereich "Batch & Shell" in den Tutorials beschrieben.
HTH Biber
[Edit]
P.S. Zum Thema anderer Lösungsansatz:
Ich würde, speziell wenn es um größere Logdateien geht, eher als Strategie über das letzte Änderungsdatum der Datei gehen.
Das heißt, in einer einzeiligen Mini-Text-Datei den zuletzt vom Batch geprüften Datum/Zeitwert speichern und diesen mit dem aktuellen Timestamp vergleichen.
Anderenfalls musst Du ja jedesmal durch alle Zeilen der Logdatei wackeln, auch um möglicherweise festzustellen, dass die Logdatei dieses Mal 47.666 Zeilen hat und dass esvor einer Minute auch schon genauso war...ist nicht sonderlich performant.
Und die "zuletzt gelesene Zeilenzahl" musst Du da auch irgendwo "Dir merken", also speichern. Ist von daher ja keine große Änderung.
[/Edit]
drei Möglichkeiten wüßte ich, wahrscheinlich gibt es noch ein paar mehr.
a) Die einfachste (und undokumentierteste):
Set /A "Counter=0"
FOR /F "delims=" %%A IN (DeineDatei) DO SET /A "COUNTER+=1"
Die beiden dokumentierten (na ja, für M$-Verhältnisse dokumentierten):
b)
...
Setlocal enableDelayedExpansion
Set /A "Counter=0"
FOR /F "delims=" %%A IN (DeineDatei) DO SET /A "COUNTER=!Counter!+1"
Setlocal disableDelayedExpansion
...
c)
...
Set /A "Counter=0"
FOR /F "delims=" %%A IN (DeineDatei) DO call :aMiniSub
:aMiniSub
SET /A "COUNTER=%Counter%+1"
goto :eof
...
Ich denke, alle 3 Möglichkeiten sind auch im Bereich "Batch & Shell" in den Tutorials beschrieben.
HTH Biber
[Edit]
P.S. Zum Thema anderer Lösungsansatz:
Ich würde, speziell wenn es um größere Logdateien geht, eher als Strategie über das letzte Änderungsdatum der Datei gehen.
Das heißt, in einer einzeiligen Mini-Text-Datei den zuletzt vom Batch geprüften Datum/Zeitwert speichern und diesen mit dem aktuellen Timestamp vergleichen.
Anderenfalls musst Du ja jedesmal durch alle Zeilen der Logdatei wackeln, auch um möglicherweise festzustellen, dass die Logdatei dieses Mal 47.666 Zeilen hat und dass esvor einer Minute auch schon genauso war...ist nicht sonderlich performant.
Und die "zuletzt gelesene Zeilenzahl" musst Du da auch irgendwo "Dir merken", also speichern. Ist von daher ja keine große Änderung.
[/Edit]