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有问题.我的批处理文件有什么问题?
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)
看来你实际上想要完成的是一个穷人的“小于或等于”。
在这种情况下,为什么不使用真正的“小于或等于”,即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)