Inhalt aus zwei .txt Dateien auslesen und in eine .txt hintereinander zusammenfügen
Hallo ich will aus Datei1 eine Zeile auslesen, dann aus Datei2 dasselbe.
Diese sollen dann hintereinander in eine neue Datei geschrieben werden.
Habs so probiert:
for /f "tokens=1" %%a in (liste1.txt) do (
for /f %%b in (liste2.txt) do (echo %%b %%a)
) >>info.txt
Das tut fast das Richtige. Aber es wird für jeden Wert aus liste1.txt die Werte aus liste2.txt hinzugefügt.
Sieht dann also so aus:
wert1.liste1 wert1.liste2
wert1.liste1 wert2.liste2
wert1.liste1 wert3.liste2
wert2.liste1 wert1.liste2
wert2.liste1 wert2.liste2
wert2.liste1 wert3.liste2
Es soll aber nur Wert1 aus Liste1 nur mit Wert1 aus Liste2 verknüpft werden. usw.
Diese sollen dann hintereinander in eine neue Datei geschrieben werden.
Habs so probiert:
for /f "tokens=1" %%a in (liste1.txt) do (
for /f %%b in (liste2.txt) do (echo %%b %%a)
) >>info.txt
Das tut fast das Richtige. Aber es wird für jeden Wert aus liste1.txt die Werte aus liste2.txt hinzugefügt.
Sieht dann also so aus:
wert1.liste1 wert1.liste2
wert1.liste1 wert2.liste2
wert1.liste1 wert3.liste2
wert2.liste1 wert1.liste2
wert2.liste1 wert2.liste2
wert2.liste1 wert3.liste2
Es soll aber nur Wert1 aus Liste1 nur mit Wert1 aus Liste2 verknüpft werden. usw.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 72738
Url: https://administrator.de/contentid/72738
Ausgedruckt am: 24.11.2024 um 19:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo alex-w und willkommen im Forum!
Versuch es mal mit folgender Vorgangsweise:
Zu jeder Zeile der ersten Liste wird durch das "skip" und die Prüfung auf "not defined" nur die korrespondierende Zeile der 2. Liste gelesen.
Etwas eleganter wäre vielleicht diese Variante:
Durch das erste "findstr" wird der Inhalt von "liste2" mit Zeilennummerierung angegeben und durch das zweite "findstr" nur die passende Zeile herausgefiltert.
Grüße
bastla
Versuch es mal mit folgender Vorgangsweise:
@echo off & setlocal
set "L1=Z:\liste1.txt"
set "L2=Z:\liste2.txt"
set "Ziel=Z:\info.txt"
if exist "%Ziel%" del "%Ziel%"
set /a Nr=0
for /f "usebackq tokens=1" %%a in ("%L1%") do set "Line1=%%a" & call :ProcessLine
goto :eof
:ProcessLine
set Line2=
if %Nr% gtr 0 (
for /f "usebackq skip=%Nr%" %%b in ("%L2%") do if not defined Line2 set "Line2=%%b"
) else (
for /f "usebackq" %%b in ("%L2%") do if not defined Line2 set "Line2=%%b"
)
echo %Line2% %Line1%>>"%Ziel%"
set /a Nr+=1
Etwas eleganter wäre vielleicht diese Variante:
@echo off & setlocal
set "L1=Z:\liste1.txt"
set "L2=Z:\liste2.txt"
set "Ziel=Z:\info.txt"
if exist "%Ziel%" del "%Ziel%"
set /a Nr=1
for /f "usebackq tokens=1" %%a in ("%L1%") do set "Line1=%%a" & call :ProcessLine
goto :eof
:ProcessLine
for /f "tokens=1* delims=:" %%b in ('findstr /n . "%L2%"^|findstr /b "%Nr%:"') do set "Line2=%%c"
echo %Line2% %Line1%>>"%Ziel%"
set /a Nr+=1
Grüße
bastla
Hallo alex-w!
Sowohl mit dem geposteten Batch als auch von der Kommandozeile (als Beispiel für Zeile 2) mit
erhalte ich das gewünschte Ergebnis - aber da Du ja für Dich eine Lösung gefunden hast, spielt's eigentlich keine Rolle mehr ...
Grüße
bastla
Schleife läuft dann nicht. Es wird einfach abgebrochen.
Kann ich nicht nachvollziehen ...Sowohl mit dem geposteten Batch als auch von der Kommandozeile (als Beispiel für Zeile 2) mit
for /f "tokens=1* delims=:" %b in ('findstr /n . "liste2.txt"^|findstr /b "2:"') do @echo %c
Grüße
bastla