variablen in for-loop von batch
in einem for-loop sind meine variablen nur tw sichtbar.
ich habe probleme bei meinem for-loop.
der loop soll zb von 5 bis 2 runterzählen und dazwischen einen filenamen zusammenstellen usw.
die ausgabe vom loop-counter (X) funktioniert.
das zusammenstellen des filenamens nur tw.
die ausgabe von kk bzw. Y liefert nur leere werte.
mein script liefert den folgenden output. warum?
wo hab ich meinen knoten im hirn?
beim output von set seh ich allerdings den richtigen wert(e).
thx
jürgen
@echo off
setlocal
set max_version=5
for /L %%X IN (%max_version%,-1,2) do @(
echo loop: %%X
set y=%%X%_foo.txt
if exist %y% echo %y% gefunden!
set kk=%%X%
echo value: %kk%
echo file: %y%
set y
)
endlocal
ich habe probleme bei meinem for-loop.
der loop soll zb von 5 bis 2 runterzählen und dazwischen einen filenamen zusammenstellen usw.
die ausgabe vom loop-counter (X) funktioniert.
das zusammenstellen des filenamens nur tw.
die ausgabe von kk bzw. Y liefert nur leere werte.
mein script liefert den folgenden output. warum?
wo hab ich meinen knoten im hirn?
beim output von set seh ich allerdings den richtigen wert(e).
thx
jürgen
loop: 5
value:
file:
y=5_foo.txt
loop: 4
value:
file:
y=4_foo.txt
loop: 3
value:
file:
y=3_foo.txt
loop: 2
value:
file:
y=2_foo.txt
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 71605
Url: https://administrator.de/contentid/71605
Ausgedruckt am: 20.11.2024 um 06:11 Uhr
1 Kommentar
Hallo ketchup!
Versuch es mit "delayedexpansion":
Da Variablen (außer die Schleifenvariable selbst) in "for"-Schleifen nur zu Beginn der Schleife ausgewertet werden, werden in der Schleife vorgenommene Änderungen nur berücksichtigt, wenn eine "verzögerte Variablenauflösung" (delayedexpansion) stattfindet. Dafür notwendig ist es (neben dem "enabledelayedexpansion"), die Variablenschreibweise von %Variable% auf !Variable! zu ändern.
Grüße
bastla
Versuch es mit "delayedexpansion":
@echo off & setlocal enabledelayedexpansion
set max_version=5
for /L %%X IN (%max_version%,-1,2) do @(
echo loop: %%X
set y=%%X%_foo.txt
if exist !y! echo !y! gefunden!
set kk=%%X%
echo value: !kk!
echo file: !y!
set y
)
Grüße
bastla