For-Schleife mit findstr
Hallo alle zusammen,
ich benötige etwas Hilfe bei einem Problem.
Ich habe auf einem Server eine Alarmierungs-Software laufen die für vom eigenen Betrieb Log-Dateien erstellt. Leider kommt es hin und wieder mal vor, dass das übergeordnete System Fehler produziert. In den Log-Files sind die eindeutig beschrieben.
Nun möchte ich die Log-Files mittels Batch-Datei auswerten. Das Skript soll über den Aufgabenplaner zeitgesteuert die Log-File aufrufen und die letzten X-Zeilen nach dem Fehlertext suchen. Wenn gefunden wurde, was ich gesucht habe, soll mir eine E-Mail gesendet werden.
Folgendes habe ich bisher erreicht:
Ich hänge jetzt an der Stelle, das ich die Zeile ausgegeben bekomme, allerdings schaffe ich es nicht diese auf meinen Fehlerwert zu prüfen. Meine Code für die Prüfung sieht folgendermaßen aus:
Auf dem unteren Bild ist zu sehen wir die Zeilen aussehen. Im oberen Bild ist zu sehen was darauf gemacht wird, wenn ich mit findstr suche.
Kann man jemand mir jemand helfen wie ich es schaffe richtig in den Zeilen zu suchen?
Vielen Dank im Vorraus
Gruß Ralf
ich benötige etwas Hilfe bei einem Problem.
Ich habe auf einem Server eine Alarmierungs-Software laufen die für vom eigenen Betrieb Log-Dateien erstellt. Leider kommt es hin und wieder mal vor, dass das übergeordnete System Fehler produziert. In den Log-Files sind die eindeutig beschrieben.
Nun möchte ich die Log-Files mittels Batch-Datei auswerten. Das Skript soll über den Aufgabenplaner zeitgesteuert die Log-File aufrufen und die letzten X-Zeilen nach dem Fehlertext suchen. Wenn gefunden wurde, was ich gesucht habe, soll mir eine E-Mail gesendet werden.
Folgendes habe ich bisher erreicht:
- der Name für die Tages-Logfile wird erstellt
- die Anzahl der Zeile in der Logfile wird bestimmt
- die Anzahl der Zeile die übersprungen werden können werden berechnet
- Ausgabe der zu prüfenden Zeilen
Ich hänge jetzt an der Stelle, das ich die Zeile ausgegeben bekomme, allerdings schaffe ich es nicht diese auf meinen Fehlerwert zu prüfen. Meine Code für die Prüfung sieht folgendermaßen aus:
for /f "skip=%var% usebackq tokens=*" %%f in (%aip%) do (
findstr "analog=4201" %%f
)
Auf dem unteren Bild ist zu sehen wir die Zeilen aussehen. Im oberen Bild ist zu sehen was darauf gemacht wird, wenn ich mit findstr suche.
Kann man jemand mir jemand helfen wie ich es schaffe richtig in den Zeilen zu suchen?
Vielen Dank im Vorraus
Gruß Ralf
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2799768312
Url: https://administrator.de/contentid/2799768312
Ausgedruckt am: 22.11.2024 um 11:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo,
für mich sieht es so aus als wäre der Wert, in der Variable %%f, falsch.
FINDSTR erwartet hier einen Dateinamen Dein Wert ist aber der,
der im ersten Bild, nach "FINDSTR:" und vor "kann nicht geöffnet werden" steht:
FINDSTR: "Command" kann nicht geöffnet werden
FINDSTR: "code" kann nicht geöffnet werden
...
Viele Grüße
für mich sieht es so aus als wäre der Wert, in der Variable %%f, falsch.
FINDSTR erwartet hier einen Dateinamen Dein Wert ist aber der,
der im ersten Bild, nach "FINDSTR:" und vor "kann nicht geöffnet werden" steht:
FINDSTR: "Command" kann nicht geöffnet werden
FINDSTR: "code" kann nicht geöffnet werden
...
Viele Grüße
Servus.
Wie @niewiederit schon sagt findstr erwartet einen Dateinamen und nicht den Inhalt als letzten Parameter.
Dafür brauchst du aber ehrlich gesagt keinen FOR-Loop, hierfür reicht:
Falls die Zeilen doch einzeln abgearbeitet werden müssen und in %aip% der Inhalt steht .... musst du den Inhalt an findstr "pipen", dann arbeitet es mit dem ihm übergebenen Inhalt.
Grüße Uwe
Wie @niewiederit schon sagt findstr erwartet einen Dateinamen und nicht den Inhalt als letzten Parameter.
Dafür brauchst du aber ehrlich gesagt keinen FOR-Loop, hierfür reicht:
more +%var% "E:\datei.log" | findstr /ilc:"analog=4201"
for /f "skip=%var% delims=" %%f in ('echo.%aip% ^| findstr /ilc:"analog=4201"') do (
echo %%f
)
In %aip% steht der zusammengesetzte Dateiname.
Dann kann das zweite Beispiel oben nicht funktionieren, denn ich ging hier davon aus das in der Variablen der Inhalt steht nicht der Dateiname. Wenn darin der Dateiname steht musst du es stattdessen so schreiben um es mit einem For-Loop zu verarbeitenfor /f "delims=" %%f in ('findstr /ilc:"analog=4201" "%aip%"') do (
echo %%f
)
for /f "delims=" %%f in ('more +%var% "%aip%" ^| findstr /ilc:"analog=4201"') do (
echo %%f
)