per Batch neuste Datei öffnen und bestimmtes Muster auslesen
Hallo zusammen,
meine Batch-Kenntnisse reichen leider für mein aktuelles Vorhaben nicht aus, daher hoffe ich, auf diesem Wege vielleicht ne Hilfestellung zu bekommen:
- In einem Ordner befinden sich mehrere log-Dateien mit dem Namensmuster 'XYZ_ZEITSTEMPEL.log' also z.B. 'XYZ_20080115_1024.log'
- In diesen Dateien befindet sich irgendwo ein bestimmtes Textsegment, welches ich gerne in eine neu anzulegende Datei verschieben würde. Den Beginn des Segmentes kann ich eindeutig identifizieren. Das Ende ebenfalls. Dazwischen befindet sich eine bestimmte Anzahl Zeilen (variabel), welche ich gerne in die andere Datei verschieben würde.
In Pseudocode ausgedrückt bräuchte ich also folgende Funktion
1. Identifiziere die neuste (anhand 'Date modified') aller Dateien im Verzeichnis, die mit 'XYZ' beginnen
2. Suche erstes Vorkommen von Muster 'ABC' in dieser Datei
3. Suche erstes Vorkommen von Muster 'DEF' nach dem ersten Vorkommen von 'ABC'
4. Kopiere die dazwischen liegenden Zeilen in neue Datei 'Neu.txt'
- Das Muster 'DEF' kommt sehr oft in der Datei vor, daher ist es im Punkt 3 wichtig, das erste Vorkommen von 'DEF' NACH 'XYZ' zu finden
- Das Identifizieren der neusten Datei in Punkt 1 wäre sehr komfortabel für mich, falls das nicht möglich ist, wäre auch ein Schleifendurchlauf durch alle Dateien mit 'XYZ' im Ordner möglich (und dann halt irgendwie Kopieren in 'XYZ_ZEITSTEMPEL.new' oder so
Ich hoffe mal, das ist mit ner batch-Datei überhaupt möglich
Es wäre wirklich SUPER, wenn mir jemand helfen könnte. Ich hoffe, ich habe genügend Info gepostet.
Danke schon mal im Voraus,
Simmon
meine Batch-Kenntnisse reichen leider für mein aktuelles Vorhaben nicht aus, daher hoffe ich, auf diesem Wege vielleicht ne Hilfestellung zu bekommen:
- In einem Ordner befinden sich mehrere log-Dateien mit dem Namensmuster 'XYZ_ZEITSTEMPEL.log' also z.B. 'XYZ_20080115_1024.log'
- In diesen Dateien befindet sich irgendwo ein bestimmtes Textsegment, welches ich gerne in eine neu anzulegende Datei verschieben würde. Den Beginn des Segmentes kann ich eindeutig identifizieren. Das Ende ebenfalls. Dazwischen befindet sich eine bestimmte Anzahl Zeilen (variabel), welche ich gerne in die andere Datei verschieben würde.
In Pseudocode ausgedrückt bräuchte ich also folgende Funktion
1. Identifiziere die neuste (anhand 'Date modified') aller Dateien im Verzeichnis, die mit 'XYZ' beginnen
2. Suche erstes Vorkommen von Muster 'ABC' in dieser Datei
3. Suche erstes Vorkommen von Muster 'DEF' nach dem ersten Vorkommen von 'ABC'
4. Kopiere die dazwischen liegenden Zeilen in neue Datei 'Neu.txt'
- Das Muster 'DEF' kommt sehr oft in der Datei vor, daher ist es im Punkt 3 wichtig, das erste Vorkommen von 'DEF' NACH 'XYZ' zu finden
- Das Identifizieren der neusten Datei in Punkt 1 wäre sehr komfortabel für mich, falls das nicht möglich ist, wäre auch ein Schleifendurchlauf durch alle Dateien mit 'XYZ' im Ordner möglich (und dann halt irgendwie Kopieren in 'XYZ_ZEITSTEMPEL.new' oder so
Ich hoffe mal, das ist mit ner batch-Datei überhaupt möglich
Es wäre wirklich SUPER, wenn mir jemand helfen könnte. Ich hoffe, ich habe genügend Info gepostet.
Danke schon mal im Voraus,
Simmon
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 78201
Url: https://administrator.de/forum/per-batch-neuste-datei-oeffnen-und-bestimmtes-muster-auslesen-78201.html
Ausgedruckt am: 29.04.2025 um 12:04 Uhr
7 Kommentare
Neuester Kommentar
Hallo Simmon und willkommen im Forum!
Ganz schematisch könnte das etwa so aussehen:
Die "dazwischen liegenden Zeilen" habe ich so interpretiert, dass die Zeilen mit den jeweiligen Kennzeichen ("ABC" bzw "DEF") nicht in die neue Datei geschrieben werden sollen.
Grüße
bastla
[Edit] Kleinere kosmetische Korrekturen bei Fehlermeldungen vorgenommen. [/Edit]
[Edit2] Durch Verwendung von "$" im letzten "findstr" Berücksichtigung ev Leerzeilen in der Ausgabe hinzugefügt. [/Edit2]
Ganz schematisch könnte das etwa so aussehen:
@echo off & setlocal
set "Ordner=D:\Temp"
set "Muster=XYZ_*.log"
set "Neu=D:\Neu.txt"
set "Von=ABC"
set "Bis=DEF"
if exist "%Neu%" del "%Neu%
for /f "delims=" %%i in ('dir /b /od "%Ordner%\%Muster%" 2^>nul') do set "Neueste=%Ordner%\%%~nxi"
If not defined Neueste echo Keine passende Datei in %Ordner% gefunden! & goto :eof
for /f "delims=:" %%i in ('findstr /n "%Von%" "%Neueste%"') do if not defined ZVon set ZVon=%%i
if not defined ZVon echo %Von% in %Neueste% nicht gefunden! & goto :eof
for /f "delims=:" %%i in ('more +%ZVon% "%Neueste%"^|findstr /n "%Bis%" ') do if not defined ZBis set ZBis=%%i
if not defined ZBis echo %Bis% in %Neueste% nicht gefunden! & goto :eof
for /f "tokens=1,2 delims=:" %%i in ('more +%ZVon% "%Neueste%"^|findstr /n $') do if %%i lss %ZBis% echo.%%j>>"%Neu%"
Grüße
bastla
[Edit] Kleinere kosmetische Korrekturen bei Fehlermeldungen vorgenommen. [/Edit]
[Edit2] Durch Verwendung von "$" im letzten "findstr" Berücksichtigung ev Leerzeilen in der Ausgabe hinzugefügt. [/Edit2]
Hallo Simmon!
Die folgende Version bezieht das Verzeichnis aus dem Pfad der Batchdatei:
Das Ersetzen von "//" am Zeilenanfang durch "#" habe ich auf die ersten beiden Zeilen beschränkt.
Leerzeilen im Bereich der auszugebenden Zeilen können (noch) nicht verarbeitet werden - bei Bedarf lässt sich da noch etwas machen. Da ich eigentlich auch sonst so gut wie nichts über den Inhalt der Log-Datei weiß, kann ich nicht abschätzen, ob sich durch die für das Ersetzen nötigen Änderungen Probleme mit Sonderzeichen ergeben werden.
Grüße
bastla
[Edit] Festlegung der Zeilengrenze für Ersetzungen auf "set /a Gr=2" korrigiert. [/Edit]
Die folgende Version bezieht das Verzeichnis aus dem Pfad der Batchdatei:
@echo off & setlocal
set "Ordner=%~dp0"
set "Muster=XYZ_*.log"
set "Neu=%~dp0\Neu.txt"
set "Von=ABC"
set "Bis=DEF"
if exist "%Neu%" del "%Neu%
for /f "delims=" %%i in ('dir /b /od "%Ordner%\%Muster%" 2^>nul') do set "Neueste=%Ordner%\%%~nxi"
If not defined Neueste echo Keine passende Datei in %Ordner% gefunden! & goto :eof
for /f "delims=:" %%i in ('findstr /n "%Von%" "%Neueste%"') do if not defined ZVon set ZVon=%%i
if not defined ZVon echo %Von% in %Neueste% nicht gefunden! & goto :eof
set /a Gr=2
for /f "delims=:" %%i in ('more +%ZVon% "%Neueste%"^|findstr /n "%Bis%" ') do if not defined ZBis set ZBis=%%i
if not defined ZBis echo %Bis% in %Neueste% nicht gefunden! & goto :eof
for /f "tokens=1,2 delims=:" %%i in ('more +%ZVon% "%Neueste%"^|findstr /n $') do if %%i lss %ZBis% set "Zeile=%%j" & call :ProcessLine %%i
goto :eof
:ProcessLine
if %1 leq %Gr% if "%Zeile:~0,2%"=="//" set "Zeile=#%Zeile:~2%"
echo.%Zeile%>>"%Neu%"
Leerzeilen im Bereich der auszugebenden Zeilen können (noch) nicht verarbeitet werden - bei Bedarf lässt sich da noch etwas machen. Da ich eigentlich auch sonst so gut wie nichts über den Inhalt der Log-Datei weiß, kann ich nicht abschätzen, ob sich durch die für das Ersetzen nötigen Änderungen Probleme mit Sonderzeichen ergeben werden.
Grüße
bastla
[Edit] Festlegung der Zeilengrenze für Ersetzungen auf "set /a Gr=2" korrigiert. [/Edit]
Hallo Simmon!
Grüße
bastla
das mit dem Ersetzen funktioniert irgendwie immer noch nicht.
Sollte (nach meinen mittlerweile vorgenommenen Tests) aber eigentlich an den Daten liegen (es werden jeweils die ersten beiden Zeichen der ersten beiden Ausgabezeilen überprüft und ggf ersetzt) - aber wenn Du' s ohnehin nicht mehr brauchst ...Grüße
bastla