saschard
Goto Top

Inhalt von meheren Log-Dateien zusammenführen (an gewisse Zeilen)

Hallo zusammen,

ich habe ein Problemchen und hoffe jemand hat eine Lösung für mich.

Ich habe über Batchskripte die Installation einer Software (Client, Server etc.) automatisiert (die täglich neu gebaut wird (daily build)). Hierbei ruft das Vater Batchskript, Kinder Batchskripte auf. Das Vater Batchskript erzeugt 2-Log-Dateien und jedes Kind Batchskript jeweils 2-Log-Dateien.

Nach Durchlauf der Batchskripte wird eine E-Mail generiert und mir zugesandt. Dabei möchte ich gern den Dateien Anhang auf 2-Log-Dateien minimieren. Den Inhalt der Kind Log-Dateien möchte ich gern in die Vater Log-Dateien kopieren, dies habe ich mit:

copy copy_process%DATE%.log /b process_%DATE%.log

durchgeführt. Der Inhalt wird jedoch an die letzten Zeile der Vater Log-Datei mit angehangen

Beispiel aus copy_process.log:

start copy process: 11.07.2013:
10:56:24,59: copy Client
10:56:44,82: Client successful copied
10:56:44,84: copy Server
10:57:41,59: Server successful copied
10:57:41,59: copy CLI
11:00:39,95: CLI successful copied
11:00:39,95: copy Runtime
11:04:40,83: Runtime successful copied

Was ich jedoch gern möchte ist den Inhalt aus den Kind Log-Dateien in gewisse Zeilen kopieren, damit ist das Lesen der unterschiedlichen Installationsschritte wesentlich einfacher.

Beispiel process.log (Vater Log-Datei):

prepare daily build installation: 11.07.2013:
10:56:24,15: check daily build version: 11.07.2013 server - 11.07.2013 client are equal
10:56:24,39: delete local daily build data
10:56:24,56: local daily build data successful deleted
daily build installation successful prepared.

Der Inhalt aus copy_process.log müsste zwischen Zeile 4 und 5 kopiert werden usw.

Wäre super wenn jemand eine Lösung für mein Problemchen hat.

Vielen Dank im Voraus.

Gruß, Sascha

Content-ID: 211198

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

Ausgedruckt am: 22.11.2024 um 06:11 Uhr

76109
76109 11.07.2013 um 13:59:25 Uhr
Goto Top
Hallo SaschaRD!

Um das Ganze etwas zu vereinfachen, wäre es eventuell sinnvoll, an den betreffenden Stellen in der Vater.Log Platzhalter in der Form 'reserved copy_procress.log' mit reinzuschreiben...

Gruß Dieter
andimue
andimue 11.07.2013 um 14:40:35 Uhr
Goto Top
Hallo,

wenn es dir möglich wäre bei allen Zeilen im Vater- und Kind-log vorne eine Uhrzeit reinzuschreiben könntest du später alle Zeilen einfach zusammenkopieren und anschliessend sortieren.

Gruß
Andi
Endoro
Endoro 11.07.2013 um 14:48:21 Uhr
Goto Top
Zitat von @SaschaRD:
Wäre super wenn jemand eine Lösung für mein Problemchen hat.

Hallo Sascha,
klar ist das zu machen. Ist aber aufwendig.
Wäre mir nix für batch.

lg
pieh-ejdsch
pieh-ejdsch 11.07.2013 um 15:05:18 Uhr
Goto Top
moin Sascha,

ich würde den Hauptbatch anpassen:

 rem Bis Hierhin zum Start der 1.Sub
call "%~dp0Sub1.cmd"  
copy copy_process%DATE%.log /b process_%DATE%.log
 rem Dann weiter im Script

Gruß Phil
SaschaRD
SaschaRD 11.07.2013 um 15:49:35 Uhr
Goto Top
Ha! Verdammte Axt...

Habe es soeben eingebaut und es funktioniert! So simple! Den Gedanken muss man aber erst mal haben!

Ich möchte recht herzlich bei allen bedanken für Ihre Antworten.

Im Vater Batchskript wurde nachdem Aufruf des Kindes:
copy /b %LOGFILE%+%COPYPRO% %LOGFILE%
eingefügt.

Das Resultat sieht dann so aus:
prepare daily build installation: 11.07.2013:
15:38:39,06: daily build version: 11.07.2013 server and 11.07.2013 local are equal
15:38:39,31: delete local daily build data
15:38:39,72: local daily build data successful deleted
start copy process: 11.07.2013:
15:38:39,77: copy Client
15:38:58,02: Client successful copied
15:38:58,02: copy Server
15:39:39,78: Server successful copied
15:39:39,78: copy CLI
15:40:32,34: CLI successful copied
15:40:32,34: copy Runtime
15:41:27,56: Runtime successful copied
daily build installation successful prepared.

Unglaublich ... ich war schon dabei eine For-Schleife zu basteln ^_^

Herzlichen Dank nochmal..
Endoro
Endoro 11.07.2013 aktualisiert um 17:35:09 Uhr
Goto Top
Zitat von @SaschaRD:
Unglaublich ... ich war schon dabei eine For-Schleife zu basteln ^_^

Das hab ich mal gemacht, es ging leichter als gedacht und ist durch die viele findstr Regex furchtbar langsam.
Ich klebe es mal hier rein, zur Warnung an spätere Generationen face-smile

@ECHO OFF &SETLOCAL
SET "mainlog=main.log"  
SET "childlogs=??.log"  

FOR %%a IN ("%childlogs%") DO (  
	SET "ftime="  
	FOR /f "tokens=1-3delims=:" %%b IN ('findstr "^[0-2][0-9]:[0-5][0-9]:[0-5][0-9],[0-9][0-9]:" "%%~a"') DO (  
		IF NOT DEFINED ftime (
			SET "$%%b:%%c:%%d=%%a"  
			SET "ftime=%%a"  
		)
	)
)
FOR /f "delims=" %%a IN ('findstr /n "^" "%mainlog%"') DO (  
	SET "line=%%a"  
	SETLOCAL ENABLEDELAYEDEXPANSION
	SET "line=!line:*:=!"  
	CALL :doline
	FOR /f "tokens=1*delims==" %%x IN ('SET "$"') DO (IF NOT "!"=="" ENDLOCAL)&SET "%%x=%%y"  
)
goto:eof

:doline
SETLOCAL ENABLEDELAYEDEXPANSION
ECHO("!line!"|findstr "^.[0-2][0-9]:[0-5][0-9]:[0-5][0-9],[0-9][0-9]:" >nul|| (echo(!line!&goto:eof)  
FOR /f "tokens=1-3delims=:" %%b IN ("!line!") DO SET "ltime=%%b:%%c:%%d"  
FOR /f "tokens=1*delims=$=" %%a IN ('set "$"') DO (  
	IF "%ltime%" gtr "%%a" IF NOT "%%b"=="0" (  
		< "%%~b" MORE  
		SET "$%%a=0"  
	)
)
ECHO(!line!
FOR /f "tokens=1*delims==" %%a IN ('SET "$"') DO (IF "!"=="" ENDLOCAL)&SET "%%a=%%b"  
goto:eof

lg