jacky86
Goto Top

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

Content-Key: 109597

Url: https://administrator.de/contentid/109597

Printed on: April 20, 2024 at 04:04 o'clock

Member: ratzla
ratzla Feb 20, 2009 at 17:19:55 (UTC)
Goto Top
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)
Member: bastla
bastla Feb 20, 2009 at 18:17:14 (UTC)
Goto Top
Hallo Jacky86 und willkommen im Forum, hallo ratzla!

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
schaffen - das sähe so aus:
@echo off & setlocal enabledelayedexpansion
FOR /F %%i IN (C:\test.txt) do (
    echo %%i
    set test=%%i
    echo !test!
)
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:
@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
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
Member: Jacky86
Jacky86 Feb 21, 2009 at 13:32:59 (UTC)
Goto Top
Hallo zusammen

Funktioniert super mit dem Unterprogramm.

Vielen Dank für eure Hilfe!

Gruss
Jacky86