"继续" Windows批处理中嵌套循环中的等效命令

时间:2016-04-01 11:43:29

标签: windows batch-file for-loop cmd

我有一个批处理文件,其中包含带continue的嵌套循环 - 就像命令:

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有问题。我的批处理文件出了什么问题?

2 个答案:

答案 0 :(得分:7)

代码块goto :Label内部的{p> ()for循环一样打破了块上下文,因此:Label之后的所有内容都被视为在块之外。因此,您需要将if条件反转为ths's answer演示不需要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

答案 1 :(得分:3)

似乎你实际上想要实现的是一个穷人“少于或等于” 在这种情况下,为什么不使用真实的“少于或等于”,即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
    )
)
相关问题