Auslesen bestimmter Werte aus Logfile mittels Batch
Hallo Leute, hab folgendes Problem:
Ich möchte aus dem angegebenen Logfile (Auszug siehe unten), welches
aus tausenden von Einträgen besteht. Die "Warning" Einträge, welche
den Text "Datei wurde übersprungen, wegen falschem Inhalt" enthält herausfiltern.
Soweit so gut. Das Script habe ich soweit schon vorbereitet siehe
unten. Ich möchte jedoch die folgenden Warning Meldungen, die nach diesem Eintrag
kommen auch mit ausgeben, so dass das Endergebnis folgendermaßen aussieht:
WARNING ( 1717,188): Datei wurde übersprungen, wegen falschem Inhalt
WARNING ( 1717,204): 2005659/01
WARNING ( 1717,204): 1330565_VG01_1853382/03
WARNING ( 1717,204): 2031936_BM0D_1853394/00
Das Schwierige hierbei ist, dass ich nicht weiss wie viele Einträge folgen. Es können
wie im Beispiel 3 oder auch mehr sein.
Gibt es hierzu eine Lösung.
Evtl.: Gebe mir den Warning Wert aus bis z.B. ein anderer Eintrag folgt z.B INFO oder ERROR...
Auszug aus Logfile:
snip----------------------------
INFO ( 0,243): super
INFO ( 0,564): Spitze
INFO ( 0,224): Klasse
INFO ( 0,344): Alles im Lot
DEBUG ( 0,435):
DEBUG ( 0,356): user.country = DE
DEBUG ( 0,234): sun.os.patch.level = Service Pack 2
DEBUG ( 0,698): path.separator = ;
DEBUG ( 0,687): user.country = DE
DEBUG ( 0,703): sun.os.patch.level = Service Pack 2
ERROR ( 425,423): Fehler 1
ERROR ( 433,423): Fehler 123
ERROR ( 435,345): Failure 457
ERROR ( 345,533): Fehler Nix gut
WARNING ( 1717,188): Datei wurde übersprungen, wegen falschem Inhalt
WARNING ( 1717,204): 2005659/01
WARNING ( 1717,204): 1330565_VG01_1853382/03
WARNING ( 1717,204): 2031936_BM0D_1853394/00
INFO ( 0,344): Alles im Lot
DEBUG ( 0,435):
DEBUG ( 0,356): user.country = DE
DEBUG ( 0,234): sun.os.patch.level = Service Pack 2
WARNING ( 1435,188): Datei nicht gefunden
WARNING ( 1245,203): 243524
WARNING ( 1245,243): 234524352
WARNING ( 1245,244): 234523452345
snip----------------------------
Hoffe ihr könnt mir hier weitgerhelfen
Grüße
Tom
Ich möchte aus dem angegebenen Logfile (Auszug siehe unten), welches
aus tausenden von Einträgen besteht. Die "Warning" Einträge, welche
den Text "Datei wurde übersprungen, wegen falschem Inhalt" enthält herausfiltern.
Soweit so gut. Das Script habe ich soweit schon vorbereitet siehe
unten. Ich möchte jedoch die folgenden Warning Meldungen, die nach diesem Eintrag
kommen auch mit ausgeben, so dass das Endergebnis folgendermaßen aussieht:
WARNING ( 1717,188): Datei wurde übersprungen, wegen falschem Inhalt
WARNING ( 1717,204): 2005659/01
WARNING ( 1717,204): 1330565_VG01_1853382/03
WARNING ( 1717,204): 2031936_BM0D_1853394/00
Das Schwierige hierbei ist, dass ich nicht weiss wie viele Einträge folgen. Es können
wie im Beispiel 3 oder auch mehr sein.
Gibt es hierzu eine Lösung.
Evtl.: Gebe mir den Warning Wert aus bis z.B. ein anderer Eintrag folgt z.B INFO oder ERROR...
Auszug aus Logfile:
snip----------------------------
INFO ( 0,243): super
INFO ( 0,564): Spitze
INFO ( 0,224): Klasse
INFO ( 0,344): Alles im Lot
DEBUG ( 0,435):
DEBUG ( 0,356): user.country = DE
DEBUG ( 0,234): sun.os.patch.level = Service Pack 2
DEBUG ( 0,698): path.separator = ;
DEBUG ( 0,687): user.country = DE
DEBUG ( 0,703): sun.os.patch.level = Service Pack 2
ERROR ( 425,423): Fehler 1
ERROR ( 433,423): Fehler 123
ERROR ( 435,345): Failure 457
ERROR ( 345,533): Fehler Nix gut
WARNING ( 1717,188): Datei wurde übersprungen, wegen falschem Inhalt
WARNING ( 1717,204): 2005659/01
WARNING ( 1717,204): 1330565_VG01_1853382/03
WARNING ( 1717,204): 2031936_BM0D_1853394/00
INFO ( 0,344): Alles im Lot
DEBUG ( 0,435):
DEBUG ( 0,356): user.country = DE
DEBUG ( 0,234): sun.os.patch.level = Service Pack 2
WARNING ( 1435,188): Datei nicht gefunden
WARNING ( 1245,203): 243524
WARNING ( 1245,243): 234524352
WARNING ( 1245,244): 234523452345
snip----------------------------
@echo off & setlocal
set "Summary=C:\logsummary.txt"
set "Filter=Datei wurde übersprungen, wegen falschem Inhalt"
if exist "%Summary%" del "%Summary%"
for %%i in (C:\logs\logfilename.txt) do (
findstr /c:"%Filter%" "%%i">nul && (
echo Logfilename: %%i
for /f "delims=" %%a in ('findstr /c:"%Filter%" "%%i"') do echo %%a
echo.
)>>"%Summary%"
echo %%i
)
pause
Hoffe ihr könnt mir hier weitgerhelfen
Grüße
Tom
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 83505
Url: https://administrator.de/contentid/83505
Ausgedruckt am: 26.11.2024 um 21:11 Uhr
3 Kommentare
Neuester Kommentar
Versuchs mal damit:
miniversum
@echo off & setlocal
set "Summary=C:\logsummary.txt"
set "Filter=Datei wurde übersprungen, wegen falschem Inhalt"
for /f "delims=:" %%a in ('findstr /N /c:"%Filter%" "C:\logs\logfilename.txt"') do call:writelines %%a
pause
goto:eof
:writelines
set zeile=%1
set "ausgabe=%random%%random%%random%"
for /f "tokens=1,* delims=:" %%a in ('findstr /N .* "C:\logs\logfilename.txt"^|findstr /B %zeile%') do set ausgabe=%%b
if "%Ausgabe:~0,7%" neq "WARNING" goto:eof
echo %ausgabe%
set /a zeile=zeile+1
call:writelines %zeile%
goto:eof
miniversum
Ja das war nur der prinzipielle Teil.
Das ganze müßte dan so aussehen (ungetestet)
Das ganze müßte dan so aussehen (ungetestet)
@echo off & setlocal
set "Summary=C:\logsummary.txt"
set "logfilefilter=C:\logs\*.txt"
set "Filter=Datei wurde übersprungen, wegen falschem Inhalt"
if exist "%Summary%" del "%Summary%"
for /f "delims=:" %%f in ('dir /B /a-D "%logfilefilter%"') do (
echo Logfilename: %%~nxf>>%Summary%
for /f "delims=:" %%a in ('findstr /N /c:"%Filter%" "%%~ff"') do call:writelines %%a "%%~ff"
)
pause
goto:eof
:writelines
set zeile=%1
set "logfilename=%~2"
set "ausgabe=%random%%random%%random%"
for /f "tokens=1,* delims=:" %%a in ('findstr /N .* "%logfilename%"^|findstr /B %zeile%') do set ausgabe=%%b
if "%Ausgabe:~0,7%" neq "WARNING" goto:eof
echo %ausgabe%>>%Summary%
set /a zeile=zeile+1
call:writelines %zeile%
goto:eof