hatzwatz
Goto Top

mit Variablen in einer Windows BATCH innerhalb einer FOR-Schleife rechnen

Hallo,

ich habe ein Problem mit Variablen in einer Windows BATCH Datei:

ich brauche für ein Skript einen inkrementellen Wert und einen Wert, der immer um 1 kleiner ist als der inkrementelle Wert.

Gedacht hatte ich mir das so:

for /L %%i in (10,-1,0) do (
set voriger=%%i-1
[Befehle]
)

Funktionieren tut es leider nicht. Er rechnet mir in der Variable "voriger" nicht den um 1 verkleinerten inkrementellen Wert aus. Habe schon viel im Netz gesucht und viel probiert. Aber es will nicht funktionieren.

Vielleicht hat jemand von euch einen Tip für mich.

Danke und viele Grüße

hatzwatz

Content-ID: 51409

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

Ausgedruckt am: 09.11.2024 um 01:11 Uhr

miniversum
miniversum 12.02.2007 um 11:38:22 Uhr
Goto Top
Du brauchst für den set befehl der /a Parameter um zu rechnen. Siehe set/?
set /a voriger=%%i-1

miniversum
hatzwatz
hatzwatz 12.02.2007 um 11:47:26 Uhr
Goto Top
auch mit /a habe ich es probiert. Er rechnet einfach nicht wirklich mit der Variablen - bzw. ich bekomme als voriger immer die gleiche Zahl raus (-1) !?!?
Biber
Biber 12.02.2007 um 11:59:59 Uhr
Goto Top
Moin hatzwatz,

miniversum hat schon Recht.

Zusätzlich musst Du noch, wenn Du INNERHALB der FOR..IN..DO-Klammern mit diesem Wert etwas tun willst, "ankündigen", dass Du diese Variable INNERHALB dieser Anweisung sofort neu auswerten willst.
Dazu gibt es den Befehl "Setlocal EnableDelayedExpansion" und die Variablenschreibweise !var! statt %var%.

@echo off & setlocal EnableDelayedExpansion
for /L %%i in (10,-1,0) do (
set voriger=%%i-1     
@echo Schleifenwert ist %%i --- voriger ist !voriger!
REM.. [Befehle]
)

HTH
Biber
hatzwatz
hatzwatz 15.02.2007 um 23:14:14 Uhr
Goto Top
wenn ich jetzt noch die Variable mit der Option /a setze, dann klappt es! Also:

@echo off & setlocal EnableDelayedExpansion
for /L %%i in (10,-1,0) do (
set /a voriger=%%i-1
@echo Schleifenwert ist %%i --- voriger ist !voriger!
REM.. [Befehle]
)

Vielen Dank !
Biber
Biber 16.02.2007 um 08:53:18 Uhr
Goto Top
Moin hatzwatz,

da hast Du natürlich Recht - wieder mal ein typischer Copy & Paste-Fehler von mir.
Sollte ich mir beides abgewöhnen - dieses Copy & Pasten und das ungetestete Posten von Skizzen. face-wink

Ich korrigiere die Zeile oben nicht.
Kannst Du bitte den Beitrag auf "Erledigt" setzen?
Ich kann es in diesem Bereich des Forums leider nicht...

Schönes Wochenende
Biber
hatzwatz
hatzwatz 16.02.2007 um 08:58:29 Uhr
Goto Top
wo setze ich den denn auf erledigt? Finde keinen Link und kein Button dafür!?!?
Biber
Biber 16.02.2007 um 09:13:18 Uhr
Goto Top
Moin hatzwatz,

oben auf der ursprünglichen Frage (=Deinem Beitrag) auf "Editieren" klicken, danach gibt es mehrere Ankreuzmöglichkeiten.
Dort das Häkchen im Kontrollkästchen "Dieser Beitrag gilt als Gelöst" setzen.

Danke
Biber