Batch: Elemente einer for-Schleife in Variable speichern
Hallo,
ich versuche in einer for-Schleife einen String zusammenzustellen. Als einfaches Beispiel diese beiden Zeilen:
SET path_libs=a
FOR %%f in (b c d) DO SET path_libs=%path_libs%;%%f
Ich erwarte eigentlich, dass danach path_libs den Wert "a;b;c;d" hat. Tatsächlich ist es aber "a;d". Versteht ihr das?
Zum Testen habe ich folgendes probiert:
FOR %%f in (b c d) DO echo %%f
oder auch
SET path_libs=a
SET path_libs=%path_libs%;b
SET path_libs=%path_libs%;c
SET path_libs=%path_libs%;d
Das geht wie erwartet. Nur die Kombination (s.o.) geht bei mir nicht.
Danke für jeden Tipp!
Benedikt
ich versuche in einer for-Schleife einen String zusammenzustellen. Als einfaches Beispiel diese beiden Zeilen:
SET path_libs=a
FOR %%f in (b c d) DO SET path_libs=%path_libs%;%%f
Ich erwarte eigentlich, dass danach path_libs den Wert "a;b;c;d" hat. Tatsächlich ist es aber "a;d". Versteht ihr das?
Zum Testen habe ich folgendes probiert:
FOR %%f in (b c d) DO echo %%f
oder auch
SET path_libs=a
SET path_libs=%path_libs%;b
SET path_libs=%path_libs%;c
SET path_libs=%path_libs%;d
Das geht wie erwartet. Nur die Kombination (s.o.) geht bei mir nicht.
Danke für jeden Tipp!
Benedikt
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 37259
Url: https://administrator.de/forum/batch-elemente-einer-for-schleife-in-variable-speichern-37259.html
Ausgedruckt am: 29.04.2025 um 02:04 Uhr
2 Kommentare
Neuester Kommentar
Moin benp,
willkommen im Forum.
Such mal bitte über die Forumssuche oder in der CMD-Hilfe mit Set /? oder CALL /? nach "DelayedExpansion".
Kurzgefasst ist es so, dass die eine "FOR...IN..DO"-Anweisung genau einmal vom CMD-Interpreter interpretiert wird und alle darin enthaltenen Variablen (außer Zählvariablen) auch genau einmal expandiert/aufgelöst werden.
Zwei Strategien, wenn es anders sein soll:
a) Über Deklaration einer verzögerten Variablenauflösung:
b) Über den Aufruf eines geCALLeten Blocks außerhalb der FOR..IN..DO..-Zeile.
Hope That Helps
Biber
willkommen im Forum.
Such mal bitte über die Forumssuche oder in der CMD-Hilfe mit Set /? oder CALL /? nach "DelayedExpansion".
Kurzgefasst ist es so, dass die eine "FOR...IN..DO"-Anweisung genau einmal vom CMD-Interpreter interpretiert wird und alle darin enthaltenen Variablen (außer Zählvariablen) auch genau einmal expandiert/aufgelöst werden.
Zwei Strategien, wenn es anders sein soll:
a) Über Deklaration einer verzögerten Variablenauflösung:
Setlocal EnableDelayedExpansion
...
SET path_libs=a
FOR %%f in (b c d) DO SET path_libs=!path_libs!;%%f
Endlocal & Set path_libs=%path_libs%
b) Über den Aufruf eines geCALLeten Blocks außerhalb der FOR..IN..DO..-Zeile.
...
SET path_libs=a
FOR %%f in (b c d) DO call :sub %%f
goto :eof
:call sub
SET path_libs=%path_libs%;%1
goto :eof
Hope That Helps
Biber