2017-10-07 1 views
0

Ich möchte meine Variable res innerhalb der Schleife aktualisiert werden, aber es wird erst nach der zweiten Iteration aktualisiert.Warum wird eine Umgebungsvariable nicht in einer Schleife aktualisiert?

Hier ist mein Code:

@echo off 
set /a res=10 

:loop 
if %res% gtr 100 (
    goto endLoop 
) else (
    set /a res=res*10 
    rem Here the 'res' shouldn't it be 100? 
    echo the result is : %res% 
    rem Here the first iteration display 10 not 100. 
    goto loop 
) 

:endLoop 
pause > nul 

Gibt es eine Erklärung dafür?

+0

Ja. Diese Frage wird wahrscheinlich 10 Mal am Tag gestellt. Sie müssen [verzögerte Erweiterung] (https://ss64.com/nt/delayedexpansion.html) verwenden. – Squashman

+1

Mögliches Duplikat von [Beispiel einer verzögerten Erweiterung in einer Stapeldatei] (https://stackoverflow.com/questions/10558316/example -von-verzögerter-Expansion-in-Batch-Datei) – Squashman

Antwort

1

Als Beispiel für die Verwendung von verzögerten Expansion ist hier Ihr modifizierten Code:

@Echo Off 
SetLocal EnableDelayedExpansion 

Set "res=10" 

:loop 
If %res% Lss 100 (
    Set/A res*=10 
    Echo the result is : !res! 
    GoTo loop 
) 

Pause>Nul 

Es gibt eine Alternative, ohne in diesem Fall unter Verwendung von verzögerten Expansion, aber ich würde vorschlagen, dass Sie mit dem ehemaligen bleiben, bis Sie sicher sind, genug, um die Reihenfolge zu verstehen, in der Dinge gelesen und geparst werden:

@Echo Off 

Set "res=10" 

:loop 
If %res% Lss 100 (
    Set/A res*=10 
    Call Echo the result is : %%res%% 
    GoTo loop 
) 

Pause>Nul 
Verwandte Themen