gelöst Batch: Elemente einer for-Schleife in Variable speichern

Mitglied: benp

benp (Level 1)

03.08.2006, aktualisiert 18:32 Uhr, 9189 Aufrufe, 2 Kommentare

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
Mitglied: Biber
03.08.2006 um 17:23 Uhr
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:
01.
Setlocal EnableDelayedExpansion
02.
...
03.
SET path_libs=a
04.
FOR %%f in (b c d) DO SET path_libs=!path_libs!;%%f
05.
Endlocal & Set path_libs=%path_libs%
b) Über den Aufruf eines geCALLeten Blocks außerhalb der FOR..IN..DO..-Zeile.
01.
...
02.
SET path_libs=a
03.
FOR %%f in (b c d) DO call :sub %%f
04.
goto :eof
05.

06.
:call sub 
07.
SET path_libs=%path_libs%;%1
08.
goto :eof
Hope That Helps
Biber
Mitglied: benp
03.08.2006 um 18:32 Uhr
Hallo Biber,

wow, vielen Dank für deine Erklärung und Lösungen!
Sie funktionieren super! Allein wär ich da nie drauf gekommen.

Viele Grüße, Benedikt
Titel: Batch: Elemente einer for-Schleife in Variable speichern
Content-ID: 37259
Art des Inhalts: Frage
Ausgedruckt am: 18.11.2019 um 14:18:18 Uhr
URL: https://administrator.de/contentid/37259