Bereich eines Logfiles in ein separates File zusammenfassen inkl. Logfile Name
Hi,
hab da mal ne Frage:
Ich habe einen Ordner, in dem Logfiles im *.txt Format gespeichert werden.
Der Inhalt der txt-Files sieht in etwa so aus:
WARNING ( 145123): Sicherung nicht komplett
WARNING ( 121345): Fehler ist vernachlässigbar
ERROR ( 135214): Datei ist defekt.
INFO ( 234534): Heute ist ein schöner Tag
DEBUG ( 234230): Debugging successful
Ich möchte nun aus allen Logfiles die Werte Warning und Error
auslesen und in eine separate txt-Datei kopieren. Zusätzlich soll die
Bezeichnung des Logfiles dazugeschrieben werden, aus dem die Information
herausgezogen worden ist.
Das Endergebnis (logsummary.txt) soll ungefähr so aussehen:
Logfilename: 20071008_1647_import_log
ERROR ( 135214): Datei ist defekt.
WARNING ( 145123): Sicherung nicht komplett
WARNING ( 121345): Fehler ist vernachlässigbar
Logfilename: 20071008_1649_import_log
ERROR ( 135214): Datei ist defekt.
WARNING ( 145123): Sicherung nicht komplett
Ist das mit einem Batchfile machbar?
Würde mit folgendem Befehl z.B. find /i "ERROR ("
die Zeilen mit "Error" auslesen, aber dann verließen sie mich,
die geistigen Ergüsse der Programmierkunst.
Gruß
Tom
hab da mal ne Frage:
Ich habe einen Ordner, in dem Logfiles im *.txt Format gespeichert werden.
Der Inhalt der txt-Files sieht in etwa so aus:
WARNING ( 145123): Sicherung nicht komplett
WARNING ( 121345): Fehler ist vernachlässigbar
ERROR ( 135214): Datei ist defekt.
INFO ( 234534): Heute ist ein schöner Tag
DEBUG ( 234230): Debugging successful
Ich möchte nun aus allen Logfiles die Werte Warning und Error
auslesen und in eine separate txt-Datei kopieren. Zusätzlich soll die
Bezeichnung des Logfiles dazugeschrieben werden, aus dem die Information
herausgezogen worden ist.
Das Endergebnis (logsummary.txt) soll ungefähr so aussehen:
Logfilename: 20071008_1647_import_log
ERROR ( 135214): Datei ist defekt.
WARNING ( 145123): Sicherung nicht komplett
WARNING ( 121345): Fehler ist vernachlässigbar
Logfilename: 20071008_1649_import_log
ERROR ( 135214): Datei ist defekt.
WARNING ( 145123): Sicherung nicht komplett
Ist das mit einem Batchfile machbar?
Würde mit folgendem Befehl z.B. find /i "ERROR ("
die Zeilen mit "Error" auslesen, aber dann verließen sie mich,
die geistigen Ergüsse der Programmierkunst.
Gruß
Tom
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 71101
Url: https://administrator.de/contentid/71101
Ausgedruckt am: 23.11.2024 um 05:11 Uhr
9 Kommentare
Neuester Kommentar
Moin tkline,
zum Testen am CMD-Prompt:
Im Batch ungefähr (ungetestet):
Gruß
Biber
zum Testen am CMD-Prompt:
>for %i in (2007*.txt) do @for /f "delims=" %a in ('findstr /v "^INFO" "%i"^|findstr /v "^DEBUG"') do @echo %a
WARNING ( 145123): Sicherung nicht komplett
WARNING ( 121345): Fehler ist vernachlässigbar
ERROR ( 135214): Datei ist defekt.
Im Batch ungefähr (ungetestet):
@for %%i in (2007*.txt) do @(
echo Logfilename %%i >>logfile_summary.txt
for /f "delims=" %%a in ('findstr /v "^INFO" "%%i"^|findstr /v "^DEBUG"') do @echo %%a >>logfile_summary.txt
)
Gruß
Biber
... oder, um "positiv" zu filtern:
Grüße
bastla
@echo off & setlocal
set "Summary=D:\logfile_summary.txt"
set "Filter=WARNING ERROR"
if exist "%Summary%" del "%Summary%"
for %%i in (D:\2007*.txt) do (
findstr /b "%Filter%" "%%i">nul && (
echo Logfilename: %%i
for /f "delims=" %%a in ('findstr /b "%Filter%" "%%i"') do echo %%a
echo.
)>>"%Summary%"
)
Grüße
bastla
Hallo tkline!
Dann etwa so:
Falls sich die Negativfilter-Einträge auf einzelne Wörter (wie im Beispiel oben) beschränken lassen, diese einfach mit Leerzeichen getrennt anführen - ansonsten müssten mehrere "findstr /C:" hintereinander geschaltet werden.
Grüße
bastla
Dann etwa so:
@echo off & setlocal
set "Summary=D:\logfile_summary.txt"
set "PosFilter=WARNING ERROR"
set "NegFilter=vernachlässigbar"
if exist "%Summary%" del "%Summary%"
for %%i in (D:\2007*.txt) do call :ProcessFile "%%i"
goto :eof
:ProcessFile
findstr /b "%PosFilter%" %1 |findstr /v "%NegFilter%">nul || goto :eof
echo Logfilename: %~1 >>"%Summary%"
findstr /b "%PosFilter%" %1 |findstr /v "%NegFilter%" >>"%Summary%"
echo.>>"%Summary%"
Grüße
bastla
Hallo tkline!
nochmals ohne die Umleitung unmittelbar nach der Zeile ":ProcessFile" einfügst, wird der Name am Bildschirm angezeigt.
Zusammen mit den "findstr"-Änderungen für ganze Sätze würde demnach das ":ProcessFile"-Unterprogramm so aussehen:
Grüße
bastla
Wenn ich anstatt nach einzelnen Wörtern nach ganzen Sätzen suchen lasse, dann kann ich das mit "findstr /C." regeln. Wie schreibe ich das unter dem Punkt NegFilter?
Eigentlich so wie oben das einzelne Wort "vernachlässigbar", also mit je einem Anführungszeichen vor "NegFilter" und einem Anführungszeichen am Ende - zumindest wenn in Deinem Satz selbst keine Anführungszeichen enthalten sind.An welcher Stelle muss ich beim Ausführen des Batches den echo Befehl setzen, damit ich sehen kann welche Dateien er gerade abarbeitet?
Wenn Du die Zeileecho Logfilename: %~1 >>"%Summary%"
Zusammen mit den "findstr"-Änderungen für ganze Sätze würde demnach das ":ProcessFile"-Unterprogramm so aussehen:
:ProcessFile
echo Bearbeite Logfile: %~1
findstr /b "%PosFilter%" %1 |findstr /v /c:"%NegFilter%">nul || goto :eof
echo Logfilename: %~1 >>"%Summary%"
findstr /b "%PosFilter%" %1 |findstr /v /c:"%NegFilter%">>"%Summary%"
echo.>>"%Summary%"
Grüße
bastla
Hallo tkline!
Könntest Du bitte noch Deinen Batch zwischen ""-Tags setzen und dann den Wie kann ich einen Beitrag als gelöst markieren??
Grüße
bastla
Könntest Du bitte noch Deinen Batch zwischen ""-Tags setzen und dann den Wie kann ich einen Beitrag als gelöst markieren??
Grüße
bastla