ketchup
Goto Top

variablen in for-loop von batch

in einem for-loop sind meine variablen nur tw sichtbar.

@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? face-wink

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

Content-ID: 71605

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

Ausgedruckt am: 20.11.2024 um 06:11 Uhr

bastla
bastla 22.10.2007 um 17:15:15 Uhr
Goto Top
Hallo ketchup!

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
)
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