Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"continue" equivalent command in nested loop in Windows Batch

I have a batch file which contains nested loop with continue-like command:

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
    )
)

But when if statement is true for the first time, it does not iterate further. I only get text files upto 1_256.txt. So it seems that goto CONTINUE has a problem. What is wrong with my batch file?

like image 464
arnobpl Avatar asked Apr 01 '16 11:04

arnobpl


1 Answers

goto :Label inside of a block of code () like a for loop breaks the block context, so everything after the :Label is treated as being outside of the block. So you need to invert the if condition to not need goto as ths's answer demonstrates, or you place the code fragment with goto and :Label into a subroutine and use call like this:

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
like image 124
aschipfl Avatar answered Sep 20 '22 13:09

aschipfl