2011-06-16 3 views
3

je code ci-dessous:utiliser une variable dans un 'pour' boucle

@echo off 
SET ITER=0 
for %%i in (%*) do (
    SET ITER+=1 
    ECHO %ITER% 
) 

La sortie est (pour trois arguments):

0 
0 
0 

Résultats attendus:

1 
2 
3 

Pourquoi ne puis-je pas accéder à la variable mise à jour dans la boucle for?

+0

@downvoter une raison quelconque? :) – Jacob

+1

Copie possible de [Variables de fichier batch initialisées dans une boucle for] (https://stackoverflow.com/questions/691047/batch-file-variables-initialized-in-a-for-loop) –

Répondre

5

L'expansion des variables avec des pourcentages est effectuée avant l'exécution d'une instruction/bloc.
Donc, dans votre cas, le bloc complet est étendu avant que le echo %ITER% ne soit exécuté, à la constante echo 0.
La variable ITER elle-même est mise à jour correctement dans la boucle.

Pour éviter cela, vous pouvez utiliser l'expansion retardée, cela fonctionne comme pour cent l'expansion mais juste au moment de l'exécution

@echo off 
setlocal EnableDelayedExpansion 
SET ITER=0 
for %%i in (%*) do (
    SET /a ITER+=1 
    ECHO !ITER! 
) 
+0

Ok, c'est la ligne 'SET ITER + = 1', cela doit être' SET/A ... ', sinon il ne peut pas calculer – jeb

+0

Désolé,/A manquait pour SET. Merci! – Jacob

Questions connexes