tkline
Goto Top

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----------------------------

@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

Content-Key: 83505

Url: https://administrator.de/contentid/83505

Printed on: April 16, 2024 at 05:04 o'clock

Member: miniversum
miniversum Mar 19, 2008 at 13:31:27 (UTC)
Goto Top
Versuchs mal damit:
@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
Member: tkline
tkline Mar 19, 2008 at 14:07:58 (UTC)
Goto Top
Danke dir,

Habe allerdings noch 2 Fragen:
Die Ausgabe ins logsummary.txt funkioniert nicht. Brauch hier noch
"%Summary%" Wo bringe ich das in deinem Script unter?

2. Wie muss ich das Skript ändern, wenn ich mehrer Logfiles durchsuchen lasse?
Wenn ich C:\logs\*.txt eingebe, dann bekomme ich keine Ausgabe.

Grüße
Tom
Member: miniversum
miniversum Mar 19, 2008 at 14:28:47 (UTC)
Goto Top
Ja das war nur der prinzipielle Teil.
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