在Windows Batch中嵌套循环中的“继续”等效命令

我有一个batch file,其中包含嵌套循环与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 ) ) 

但是, if语句第一次是真的,它不会进一步迭代。 我只能得到文本文件高达1_256.txt 。 所以看起来goto CONTINUE有问题。 我的batch file有什么问题?

goto :Label代码块() goto :Label ()for循环)会打破块上下文,因此:Label之后的所有内容都将被视为在块之外。 所以你需要将if条件反转为不需要goto ,或者把代码片段放到goto :Label放到一个子例程中,使用这样的call

 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 

看起来你实际上正在努力完成的是一个穷人的“小于或等于”。
在这种情况下,为什么不使用真正的“小于或等于”,这是LEQ
另外,你似乎想要在“%% i _ %% j”.txt文件中输出test.exe,所以不要使用echo

所以这将是

 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 ) )