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
Please also mark the comments that contributed to the solution of the article
Content-Key: 37259
Url: https://administrator.de/contentid/37259
Printed on: April 25, 2024 at 18:04 o'clock
2 Comments
Latest comment
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