J’ai un fichier batch qui contient une boucle nestede avec la commande continue
-like:
for %%i in (1, 2, 4, 8, 16, 32, 64, 128, 256) do ( for %%j in (1, 2, 4, 8, 16, 32, 64, 128, 256) do ( if %%i gtr %%j goto CONTINUE test.exe 0 %%i %%j 100000 > "%%i_%%j".txt :CONTINUE rem ) )
Mais if
énoncé est vrai pour la première fois, il ne réitère pas davantage. Je ne reçois que des fichiers texte jusqu’à 1_256.txt
. Il semble donc que goto CONTINUE
ait un problème. Quel est le problème avec mon fichier de commandes?
goto :Label
intérieur d’un bloc de code ()
comme une boucle for
rompt le contexte du bloc, donc tout ce qui suit le :Label
est traité en dehors du bloc. Donc, vous devez inverser la condition if
pour ne pas avoir besoin de goto
comme le montre la réponse , ou vous placez le fragment de code avec goto
et :Label
dans un sous-programme et utilisez un call
comme ceci:
for %%i in (1, 2, 4, 8, 16, 32, 64, 128, 256) do ( for %%j in (1, 2, 4, 8, 16, 32, 64, 128, 256) do ( call :SUB %%i %%j ) ) exit /B :SUB outer inner if %1 gtr %2 goto CONTINUE test.exe 0 %1 %2 100000 > "%1_%2.txt" :CONTINUE rem exit /B
il semble que ce que vous essayez réellement d’accomplir, c’est un «homme pauvre ou égal».
Dans ce cas, pourquoi ne pas utiliser le réel “inférieur ou égal à”, qui est LEQ
?
De plus, vous semblez vouloir la sortie de test.exe dans le fichier .txt “%% i _ %% j”, donc n’utilisez pas echo
.
Donc ce serait
for %%i in (1, 2, 4, 8, 16, 32, 64, 128, 256) do ( for %%j in (1, 2, 4, 8, 16, 32, 64, 128, 256) do ( if %%i LEQ %%j test.exe 0 %%i %%j 100000 > "%%i_%%j".txt ) )