Batch WinXP - jeweils 3 Bestimmte Zeilen aus mehreren Textdateien in neue Datei (die 3 Zeilen hintereinander dann als Einzeiler)
Hallo Ihr Fachleute,
ich krieg's nicht hin, FOR ist für mich nur noch verwirrrend, kenne mich mit den Detaills nicht aus.
Ich möchte eine Log-Datei erstellen.
Diese soll entstehen aus Inhalten bestimmter Textdateien, die alle im gleichen Verzeichnis liegen, z.B. "D:\HL7\" und dem Muster "Bef*.txt" entsprechen.
Die Textdateien beinhalten unter anderem die u. a., immer gleiche Struktur, um deren Daten es geht.
Sollte irgendwann der Header erweitert werden, wäre es möglich, das die Zeilen sich ändern könnten,
besser auf die Begriffe stützen sollte, wie A-Nr, geb. am:, Materialeingang etc. So wäre ein evtl. späteres Zeilenverschieben durch Header-Veränderung unerheblich.
Die erzeugte Zieldatei (z. B. Liste.log) sollte dann folgenden Inhalt zeigen:.
E 14361/13 EIN30.01.2014 AUS31.01.2014 A-Nr: 7503387431 Name: Aaa, Bbbbbb, geb. am: 01.01.1950
Ich bin euch für eure Hilfe sehr dankbar.
Stitch
ich krieg's nicht hin, FOR ist für mich nur noch verwirrrend, kenne mich mit den Detaills nicht aus.
Ich möchte eine Log-Datei erstellen.
Diese soll entstehen aus Inhalten bestimmter Textdateien, die alle im gleichen Verzeichnis liegen, z.B. "D:\HL7\" und dem Muster "Bef*.txt" entsprechen.
Die Textdateien beinhalten unter anderem die u. a., immer gleiche Struktur, um deren Daten es geht.
| bis OBX|7|TX |
| = 3 Separatoren ohne dazwischenliegende Daten. |
|A-Nr: 7503387431 Name: Aaa, Bbbbbb geb. am: 01.01.1950 | F | |20140131 | ||
|Materialeingang: 30.01.2014 | F | |20140131 | ||
|Berichtsausgang: 31.01.2014 | F | |20140131 | ||
|Berichtsnummer: E 14361/13 | F | |20140131 |
Sollte irgendwann der Header erweitert werden, wäre es möglich, das die Zeilen sich ändern könnten,
|A-Nr. ..... etc. beginnt dann erst a OBX|8|TX |
Die erzeugte Zieldatei (z. B. Liste.log) sollte dann folgenden Inhalt zeigen:.
E 14361/13 EIN30.01.2014 AUS31.01.2014 A-Nr: 7503387431 Name: Aaa, Bbbbbb, geb. am: 01.01.1950
Ich bin euch für eure Hilfe sehr dankbar.
Stitch
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 228436
Url: https://administrator.de/forum/batch-winxp-jeweils-3-bestimmte-zeilen-aus-mehreren-textdateien-in-neue-datei-die-3-zeilen-hintereinander-228436.html
Ausgedruckt am: 15.04.2025 um 17:04 Uhr
2 Kommentare
Neuester Kommentar
Hallo Experiment626!
Das könnte (weitgehend ungetestet) etwa so gehen:
Geschwindigkeitsrekorde lassen sich damit aber sicher nicht aufstellen ...
Kurz zur Erklärung der Variablen %Feld1% bis %Feld4% (andere Variablen, deren Namen mit "Feld" beginnen, darf es übrigens in diesem Batch nicht geben): Diese enthalten den Suchbegriff und (nach dem Semikolon) den Text, der vor dem jeweiligen Feld ausgegeben werden soll (also zB "EIN" vor dem Wert von "Materialeingang").
Zu
Grüße
bastla
Das könnte (weitgehend ungetestet) etwa so gehen:
@echo off & setlocal
set "Ordner=D:\HL7"
set "Dateien=Bef*.txt"
set "Liste=D:\Liste.log"
set "Feld1=Berichtsnummer;"
set "Feld2=Materialeingang;EIN"
set "Feld3=Berichtsausgang;AUS"
set "Feld4=A-Nr;A-Nr: "
del "%Liste%" 2>nul
pushd "%Ordner%"
for /f "delims=" %%i in ('dir /b/a-d "%Dateien%"') do call :ProcessFile "%%i"
popd
goto :eof
:ProcessFile
set "Satz="
for /f "tokens=1-3 delims=;=" %%e in ('set Feld') do call :ProcessField %1 "%%f" "%%g"
setlocal enabledelayedexpansion
>>"%Liste%" echo !Satz:~1!
endlocal
goto :eof
:ProcessField
for /f "delims=" %%a in ('findstr /lc:"%~2: " %1') do set "Zeile=%%a"
call set "Daten=%%Zeile:*%Feld%: =%%"
for /f "delims=|" %%a in ("%Daten%") do set "Satz=%Satz% %~3%%a"
goto :eof
Kurz zur Erklärung der Variablen %Feld1% bis %Feld4% (andere Variablen, deren Namen mit "Feld" beginnen, darf es übrigens in diesem Batch nicht geben): Diese enthalten den Suchbegriff und (nach dem Semikolon) den Text, der vor dem jeweiligen Feld ausgegeben werden soll (also zB "EIN" vor dem Wert von "Materialeingang").
Zu
FOR ist für mich nur noch verwirrrend, kenne mich mit den Detaills nicht aus.
könnte ich das einschlägige "Tutorial zur FOR-Schleife" von @Friemler empfehlen.Grüße
bastla