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:
durchgeführt. Der Inhalt wird jedoch an die letzten Zeile der Vater Log-Datei mit angehangen
Beispiel aus copy_process.log:
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):
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
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
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.
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 211198
Url: https://administrator.de/contentid/211198
Ausgedruckt am: 22.11.2024 um 06:11 Uhr
6 Kommentare
Neuester Kommentar
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
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
Hallo Sascha,
klar ist das zu machen. Ist aber aufwendig.
Wäre mir nix für batch.
lg
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
@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