当我在一个双重内使用goto会发生什么?

为了更好地解释我在问什么,我做了一小段代码。 假设我有以下几点:

for /l %%i in (1,1,3) do ( :break for /l %%j in (1,1,3) do ( if "%%i,%%j" equ "2,2" goto :break echo(%%i,%%j ) ) 

上述代码的预期输出是:

 1,1 1,2 1,3 2,1 3,1 3,2 3,3 

但是,我得到的结果是:

 1,1 1,2 1,3 2,1 %i,1 %i,2 %i,3 

这只是一个例子, for我使用的所有循环来说,都会发生。 那么,有没有人能告诉我, goto实际上做了什么事情,影响了这么多的外部? 提前致谢!

GOTO打破了(如果)上下文。 所以在第一次执行之后,外循环执行被中断。 作为一个函数里面的一个函数仍然可以访问外部的子程序调用令牌可以使用以下解决方法:

 @echo off for /l %%i in (1,1,3) do ( call ::funct ) exit /b %errorlevel% :funct for /l %%j in (1,1,3) do ( rem :: rem :: notice that %%i is accessible inside the FOR rem :: if "%%i,%%j" equ "2,2" goto break echo(%%i,%%j ) :break exit /b %errorlevel%