Zeilenweise auslesen und Abspeichern in einer Variable
Hallo zusammen
Ich habe folgendes Problem: Ich möchte etwas aus einer Text-Datei Zeilenweise auslesen und die Zeile noch in der FOR-Schleife dann in eine andere Variable speichern, die später dann noch bearbeitet wird.
Meine Text-Datei sieht folgendermassen aus (ist vorerst nur ein Test):
c:\test\test\test\test.html
c:\test2\test2\test2\test2.html
Hier meine Bat-Datei:
@echo off
FOR /F %%i IN (C:\test.txt) do (
echo %%i
set test=%%i
echo %test%
)
Und hier die Ausgabe:
c:\test\test\test\test.html
c:\test2\test2\test2\test2.html
c:\test2\test2\test2\test2.html
c:\test2\test2\test2\test2.html
Ich will aber, dass in der 2. Zeile "c:\test\test\test\test.html" steht, also das selbe wie in der oberen Zeile.
Irgendwie setzt er in der Variable "test" den Wert der 1. Zeile nicht ein, sondern nur den Wert der 2.
Kann mir das jemand weiterhelfen?
Danke & Gruss
Jacky86
Ich habe folgendes Problem: Ich möchte etwas aus einer Text-Datei Zeilenweise auslesen und die Zeile noch in der FOR-Schleife dann in eine andere Variable speichern, die später dann noch bearbeitet wird.
Meine Text-Datei sieht folgendermassen aus (ist vorerst nur ein Test):
c:\test\test\test\test.html
c:\test2\test2\test2\test2.html
Hier meine Bat-Datei:
@echo off
FOR /F %%i IN (C:\test.txt) do (
echo %%i
set test=%%i
echo %test%
)
Und hier die Ausgabe:
c:\test\test\test\test.html
c:\test2\test2\test2\test2.html
c:\test2\test2\test2\test2.html
c:\test2\test2\test2\test2.html
Ich will aber, dass in der 2. Zeile "c:\test\test\test\test.html" steht, also das selbe wie in der oberen Zeile.
Irgendwie setzt er in der Variable "test" den Wert der 1. Zeile nicht ein, sondern nur den Wert der 2.
Kann mir das jemand weiterhelfen?
Danke & Gruss
Jacky86
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 109597
Url: https://administrator.de/forum/zeilenweise-auslesen-und-abspeichern-in-einer-variable-109597.html
Ausgedruckt am: 04.04.2025 um 05:04 Uhr
3 Kommentare
Neuester Kommentar
Innerhalb einer for schleife kann Windows keine Variablen veränden die in der Schleife selbst verwendet werden.
habe mich das selbst schon ziemlich geplagt.
Evtl. klappts wenn Du die Variable an einen andere Variable übergibst und diese dann bearbeites.
Viel Glück
(Mir hats irgenwann dann glangt.. ich habs dann unt Linux gemacht - da ist sowas ohne gefrickle möglich)
habe mich das selbst schon ziemlich geplagt.
Evtl. klappts wenn Du die Variable an einen andere Variable übergibst und diese dann bearbeites.
Viel Glück
(Mir hats irgenwann dann glangt.. ich habs dann unt Linux gemacht - da ist sowas ohne gefrickle möglich)
Hallo Jacky86 und willkommen im Forum, hallo ratzla!
Eine kleine Richtigstellung zu
Abhilfe kann hier ein
schaffen - das sähe so aus:
Zu beachten ist nicht nur die veränderte Schreibweise mit "!" anstelle von "%", sondern auch, dass innerhalb der Variablen daraus resultierend "!" einfach "verschluckt" werden.
Nicht zuletzt deswegen eine alternative Vorgangsweise mit Verwendung eines Unterprogrammes:
Im Unterprogramm ":ProcessLine" (das als eigener "Batch im Batch" zu sehen ist) können bei Bedarf auch zusätzliche Modifikationen des Textes oder Berechnungen etc vorgenommen werden.
Grüße
bastla
Eine kleine Richtigstellung zu
innerhalb einer for schleife kann ### keine Variablen veränden die in der Schleife selbst verwendet werden.
Defaultmäßig (weil "delayedExpansion" nicht aktiviert ist) können Werte von Variablen in einer "for"-Schleife zwar verändert werden, allerdings wird bereits zu Beginn der Schleifenverarbeitung der Variableninhalt gelesen und dann nicht mehr aktualisiert - daher wird bei der Ausgabe ein "alter" (bzw für die erste Zeile, da die Variable zu Beginn der Schleife noch keinen Inhalt hatte, gar kein) Wert verwendet.Abhilfe kann hier ein
setlocal enabledelayedexpansion
@echo off & setlocal enabledelayedexpansion
FOR /F %%i IN (C:\test.txt) do (
echo %%i
set test=%%i
echo !test!
)
Nicht zuletzt deswegen eine alternative Vorgangsweise mit Verwendung eines Unterprogrammes:
@echo off & setlocal
FOR /F %%i IN (C:\test.txt) do (
echo %%i
set "test=%%i" & call :ProcessLine
)
goto :eof
:ProcessLine
echo %test%
goto:eof
Grüße
bastla