为了更好地解释我在问我做了一小段代码。让我们说我有以下内容:
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
实际上做了哪些事情会影响到for
这么多吗?提前谢谢!
答案 0 :(得分:4)
GOTO
打破for(和if)上下文。因此,在第一次执行goto之后,外部循环执行被中断。由于函数内部的FOR
仍然可以访问子程序中的外部令牌,因此可以使用以下解决方法:
@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%