didie08
Goto Top

Letzte 10 Zeilen aus Dateien lesen

Ich brauche Hilfe beim verwendeden von foschleifen

Hallo

Ich habe in einem Ordner Logfiles stehen. Von diesen Logfiles möchte ich jeweils die letzten 10 Zeilen in einer Auswertung zusammenfassen. Ich habe mir gedacht dies mit einer verschachtelten forschleife zu tun. In der ersten Schleife zähle ich die Zeilen und in der zweiten Schleife überspringe ich die nicht benötigten Zeilen. Hier habe ich nun aber das Problem, dass meine Variable %zeile_neu% von der skip Funktion nicht erkannt wird. Kann mir jemamand sagen warum nicht?


 
echo on & setlocal EnableDelayedExpansion
rem liste der Logfiles
rem
dir /B D:\wzb-daten-transfer\logs\cz\*.log>templiste1.txt

for /f "tokens=1,* delims= " %%i in (templiste1.txt) do (  
                                       	
	set zeilen=0

	rem Zeilen zaehlen.

	for /f "tokens=* delims= " %%k in (D:\wzb-daten-transfer\logs\cz\%%i) do (  
	set /a zeilen=!zeilen!+1
	echo !zeilen!

	)
	
	set /a zeile_neu=!zeilen!-10

	echo !zeile_neu!
 
	for /f "tokens=* skip=!zeile_neu! delims= " %%m in (D:\wzb-daten-transfer\logs\cz\%%i) do (  

	echo %%m>>D:\wzb-daten-transfer\logs\cz\auswertung.log

	)
	
)

Gruß
didie08

Content-ID: 184356

Url: https://administrator.de/forum/letzte-10-zeilen-aus-dateien-lesen-184356.html

Ausgedruckt am: 23.12.2024 um 09:12 Uhr

Skyemugen
Skyemugen 02.05.2012, aktualisiert am 18.10.2012 um 18:50:46 Uhr
Goto Top
Aloha,

warum so viel gewurstel, unser lieber bastla hat da mal was hingekritzelt face-wink (bzw. eben die dort auch genannte tail.exe nutzen)

greetz André

P.S.: ein einfaches Nutzen von %zeile_neu% sollte das Problem beheben face-wink
bastla
bastla 02.05.2012, aktualisiert am 18.10.2012 um 18:50:46 Uhr
Goto Top
Hallo didie08!

Ich würde eher so (ungetestet) an die Sache herangehen:
echo on & setlocal
for /f "tokens=1,* delims= " %%i in ('dir /B D:\wzb-daten-transfer\logs\cz\*.log') do call :ProcessFile "D:\wzb-daten-transfer\logs\cz\%%i"  
goto :eof                                       	

:ProcessFile
for /f "delims=:" %%a in ('find /c /v "!!!!!"<%1') do set "zeilen=%%a"  
set /a zeile_neu=zeilen-10
echo %zeile_neu%
more +%zeile_neu% %1>>D:\wzb-daten-transfer\logs\cz\auswertung.log
goto :eof
Ganz klar ist mir übrigens Deine erste Schleife (die ich einfach mal übernommen habe) nicht - eigentlich sollte die eher so aussehen:
for /f "delims=" %%i in ('dir /B D:\wzb-daten-transfer\logs\cz\*.log') do call :ProcessFile "D:\wzb-daten-transfer\logs\cz\%%i"
Übrigens: Sollte es in den Dateien Zeilen mit "!!!!!" geben, einfach eine andere Zeichenfolge, die sicher nicht enthalten ist, in der Zeile 6 des Batches verwenden ...

Grüße
bastla

[Edit] @skye
Das hätte ich vermutlich auch gefunden - aber mal leicht verändert "kritzeln" ist ja auch schön ... face-wink
[/Edit]
106009
106009 02.05.2012 um 15:48:29 Uhr
Goto Top
gelöscht, unnötig Zeit verplempert.
didie08
didie08 02.05.2012 um 17:16:23 Uhr
Goto Top
Hallo bastla

Vielen Dank für die schnelle Antwort.

Leider werden die Schleifen nicht durchlaufen. Ich habe eine echo %1>>testlog1.txt in der 2 Schleife eingebaut um das zü prufen. Diese testlog1.txt enthält nur eine Zeile.

echo on & setlocal

for /f "tokens=* delims=" %%i in ('dir /B D:\wzb-daten-transfer\logs\cz\*.log') do (  
call :ProcessFile "D:\wzb-daten-transfer\logs\cz\%%i"  
goto :eof

)


:ProcessFile
echo %1>>testlog1.txt

for /f "tockens=* delims=:" %%a in ('find /c /v "!!!!!"<%1') do (  
set "zeilen=%%a"  
set /a zeile_neu=zeilen-10
echo %zeile_neu%
more +%zeile_neu% %1>>D:\wzb-daten-transfer\logs\cz\auswertung.log
goto :eof
pause

)

Gruß
didie08
bastla
bastla 02.05.2012 um 17:24:32 Uhr
Goto Top
Hallo didie08!

Vorschlag: Ersetze, wenn Dir denn schon nach Änderungen ist, meine Zeile 6 durch
for /f %%a in ('find /c /v "!!!!!"^<%1') do set "zeilen=%%a"
(nötig wär's nicht [Edit] wegen des delimiters, aber das "^" fehlte dann doch sehr [/Edit]), belasse dafür den Rest meines Ansatzes so, wie ich ihn geschrieben habe und teste mal damit ...

Grüße
bastla
didie08
didie08 03.05.2012 um 14:52:57 Uhr
Goto Top
Hallo Bastla.

Ich hatte das Beispiel von dir verädert weil sich garnichts getan hatte, und ich dachte ich müsste den Code noch entsprechend ergänzen.

Nachdem ich nun dienen Code unverändert mit der geänderten Zeile 6 verwendet habe, funktioniert die bat einwandfrei. Super vielen Dank dafür.

Was mich noch gerne wissen würde, warum ist das ^ so entscheidend?

Gruß
didie08
Skyemugen
Skyemugen 03.05.2012 um 15:52:49 Uhr
Goto Top
Aloha,

hmm also
tockens=
Was'n das?

greetz André

P.S.: Ohne zu escapen ^ würde da nix mit < in der Verarbeitungsklammer laufen, da macht dir der Interpreter den H. M. Murdock face-wink

offtopic ... ollidolli er innert mich mehr und mehr an Kaputtnick ... gelöscht, unnötig Zeit verplempert ... ja, das war genau seine Art