2016-04-01 122 views
4

我有一个包含与continue般的命令嵌套循环批处理文件:“继续”等效命令在Windows批量

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

+1

总之,标签(如:继续)不能在循环中使用。 – lit

回答

3

goto :Label代码()for循环块内打破了块的上下文,所以:Label后一切都被视为是块之外。所以,你需要反转if条件并不需要gotoths's answer演示,或者你放置的代码片段与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

在':sub'程序中分别使用'%1'和'%2'代替'%outer%'和'%inner%'... – JosefZ

+0

@JosefZ,是的,当然,我输入得太快了。 。 – aschipfl

1

看来你实际上正在努力完成的是一个穷人的“小于或等于”。
在这种情况下,为什么不使用真正的“小于或等于”,即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 
    ) 
) 
+0

谢谢。这解决了我的目的,而不使用任何“继续”的命令。但是,我认为,在Windows批处理脚本中没有“好”(用户友好)的“继续”等价物。我认为,要在复杂的场景中完成这样的事情,需要一些“脏编码技巧”。 – arnobpl