我有一个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 ) )