mehrere Zeilen auslesen und zu einer zusammenfassen
Ich möchte aus einer Textdatei die Zeileneinträge auslesen und diese in einer Variablen zwischenspeichern und dann mittels for-schleife in eine Textdatei schieben.
set line=
FOR /f "delims=" %%f IN (MODULES.txt) DO set line=%line% %%f
echo %line% >>sortiert.txt
Im Grunde nichts schweres, nur leider macht die for-schleife Probleme. Ich verstehe nicht, warum ich immer nur den letzten Eintrag der TXT Datei aufgelistet bekomme.
Also in wenn in der MODULES.txt die Eintrage
1
2
3
stehen, wird nur 3 in der sortiert.txt aufgeführt.
Ich will aber
1 2 3
dort stehen haben!
Wo liegt mein fehler?
set line=
FOR /f "delims=" %%f IN (MODULES.txt) DO set line=%line% %%f
echo %line% >>sortiert.txt
Im Grunde nichts schweres, nur leider macht die for-schleife Probleme. Ich verstehe nicht, warum ich immer nur den letzten Eintrag der TXT Datei aufgelistet bekomme.
Also in wenn in der MODULES.txt die Eintrage
1
2
3
stehen, wird nur 3 in der sortiert.txt aufgeführt.
Ich will aber
1 2 3
dort stehen haben!
Wo liegt mein fehler?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 51018
Url: https://administrator.de/forum/mehrere-zeilen-auslesen-und-zu-einer-zusammenfassen-51018.html
Ausgedruckt am: 23.04.2025 um 09:04 Uhr
9 Kommentare
Neuester Kommentar
Hallo wickie666!
So vielleicht:
Mit dem "type" habe ich etwas Zusatzaufwand betrieben, um zB Pfadangaben mit Leerstellen unterbringen zu können - kannst Du auch wieder auf die Angabe des Dateinamens (aber ohne Anführungszeichen) reduzieren.
Grüße
bastla
So vielleicht:
@echo off & setlocal EnableDelayedExpansion
set line=
FOR /f "delims=" %%f IN ('type "MODULES.txt"') DO set "line=!line! %%f"
echo %line%>>sortiert.txt
Grüße
bastla
Hallo wickie666!
Verschachteln ginge schon, Du könntest es aber auch so versuchen:
Die Klimmzüge mit dem Überprüfen von %count% auf 0 verhindern, dass vor der ersten Zeile eine Leerstelle ausgegeben wird und die Klammern verhindern das am Ende der Zeile.
Grüße
bastla
Verschachteln ginge schon, Du könntest es aber auch so versuchen:
@echo off
set line=
set /a count=0
FOR /f "delims=" %%f IN ('type "MODULES.txt"') DO call :ProcessLine "%%f"
(echo %line%)>>sortiert.txt
goto :eof
:ProcessLine
if %count%==0 goto :NewLine
set /a count+=1
If %count% GTR 3 goto :NewLine
set "line=%line% %~1"
goto :eof
:NewLine
If %count% neq 0 (echo %line%)>>sortiert.txt
set "line=%~1"
set /a count=1
goto :eof
Grüße
bastla
Moin wickie666,
hmmm... ein bisschen angestrengt sehen diese Klimmzüge schon aus.
Eine Variation von bastla's Vorlage wäre:
Ich hab dieses "Plus 1 und wenn = 3 dann wieder 0" jetzt mit der Modulo-Funktion versucht, etwas lesbarer zu machen.
Und, zweite Anmerkung, ich würde diese Umleitung nach sortiert.txt NICHT im Batch nach den ECHO-Befehlen machen, sondern im Batch nur ein "Echo %line%" behalten.
Und dann den Batch 3Lines2One.bat ggf. komplett umleiten.
Gruss
Biber
hmmm... ein bisschen angestrengt sehen diese Klimmzüge schon aus.
Eine Variation von bastla's Vorlage wäre:
::----------snipp 3Lines2One.bat
@echo off &setlocal
set line=
set /a count=0
FOR /f "delims=" %%f IN ('type "MODULES.txt"') DO call :ProcessLine "%%f"
if [%line%] NEQ (echo %line%)>>sortiert.txt
goto :eof
:ProcessLine
set "line=%line% %~1"
set /a count+=1
set /a modrest=count%%3
If %modrest%==0 (
(echo %line%)>>sortiert.txt
set Line=
)
goto :eof
::----------snipp 3Lines2One.bat
Ich hab dieses "Plus 1 und wenn = 3 dann wieder 0" jetzt mit der Modulo-Funktion versucht, etwas lesbarer zu machen.
Und, zweite Anmerkung, ich würde diese Umleitung nach sortiert.txt NICHT im Batch nach den ECHO-Befehlen machen, sondern im Batch nur ein "Echo %line%" behalten.
Und dann den Batch 3Lines2One.bat ggf. komplett umleiten.
3Lines2One >sortiert.txt
Gruss
Biber
@Biber
Kommt mir das nur so vor, oder beginnen bei Deiner Lösung alle Ergebniszeilen mit einer Leerstelle (das zu vermeiden war eigentlich der Grund der kaum gewürdigten Anstrengung
?
Grüße
bastla
Kommt mir das nur so vor, oder beginnen bei Deiner Lösung alle Ergebniszeilen mit einer Leerstelle (das zu vermeiden war eigentlich der Grund der kaum gewürdigten Anstrengung
Grüße
bastla
@bastla
Menno, man/frau kann sich auch anstellen... ist doch nur ein Batch..
[wirkt immer noch nicht angestrengt,,,,]
Grüße
Biber
Menno, man/frau kann sich auch anstellen... ist doch nur ein Batch..
::----------snipp 3Lines2One.bat
@echo off &setlocal
set "line= "
set /a count=0
FOR /f "delims=" %%f IN ('type "MODULES.txt"') DO call :ProcessLine "%%f"
if "%line%" NEQ " " (echo %line%x)
goto :eof
:ProcessLine
set "line=%line%%~1"
set /a count+=1
set /a modrest=count%%3
If %modrest%==0 (
(echo %line%)
set "Line= "
)
goto :eof
::----------snipp 3Lines2One.bat
[wirkt immer noch nicht angestrengt,,,,]
Grüße
Biber
@Biber

Sorry - bin momentan etwas hyperaktiv (Fieber hat nachgelassen, Lungenentzündung als "nur leicht" diagnostiziert) ...
Grüße
bastla
Das kannst Du auch nicht schlimmer werden lassen...
Soll keiner sagen, ich hätt's nicht versucht. Sorry - bin momentan etwas hyperaktiv (Fieber hat nachgelassen, Lungenentzündung als "nur leicht" diagnostiziert) ...
Zonenrandgebiet
Noch länger?Grüße
bastla