前几天有个朋友在QQ群里面提的一个问题,代码如下:
@echo on
for /l %%i in (1,1,5) do (
echo %%i
if %%i equ 4 (
goto :end
)
)
:end
pause
执行过程如下:
d:\Test>test.bat
d:\Test>for /L %i in (1 1 5) do (
echo %i
if %i EQU 4 (goto :end )
)
d:\Test>(
echo 1
if 1 EQU 4 (goto :end )
)
1
d:\Test>(
echo 2
if 2 EQU 4 (goto :end )
)
2
d:\Test>(
echo 3
if 3 EQU 4 (goto :end )
)
3
d:\Test>(
echo 4
if 4 EQU 4 (goto :end )
)
4
d:\Test>(
echo 5
if 5 EQU 4 (goto :end )
)
d:\Test>pause
Press any key to continue . . .
按理说,%%i 等于 4 的时候,就应该跳出 for 循环了,但为什么执行到 5 那里去了呢?原因是,for /l 不管循环体内部是否有跳出循环的语句,它都会遍历完整个循环条件。
我们写个大点的循环来感受一下:
@echo off
for /l %%i in (1,1,5000000) do (
echo %%i
if %%i equ 4 (
goto :end
)
)
:end
exit
如果你认为它执行到 %%i 等于 4 的时候就会退出,那就错了。它会遍历完 1 到 5000000 的。
阅读(8852) | 评论(2) | 转发(0) |