2016-04-01 44 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