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

arn*_*bpl 7 windows for-loop cmd 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
    )
)
Run Code Online (Sandbox Code Playgroud)

但是当if声明第一次成立时,它不会进一步迭代.我只获取文本文件1_256.txt.所以似乎goto CONTINUE有问题.我的批处理文件有什么问题?

asc*_*pfl 8

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
Run Code Online (Sandbox Code Playgroud)


ths*_*ths 7

看来你实际上想要完成的是一个穷人的“小于或等于”。
在这种情况下,为什么不使用真正的“小于或等于”,即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
    )
)
Run Code Online (Sandbox Code Playgroud)