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-Key: 71605

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

Printed on: April 16, 2024 at 18:04 o'clock

Member: bastla
bastla Oct 22, 2007 at 15:15:15 (UTC)
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