|
|
0、for的语句块中可以使用标签吗?可以,但是不能随便用。
1、不要将标签或::注释放在FOR语句块的末尾。
例如:
@echo off
for /l %%i in (1,1,10) do (
echo %%i
:done
)
pause
运行时提示:“此时不应有 ) ”。
2、不要在FOR语句块中使用 goto+标签 来实现跳转或者循环。
例子:
@echo off
setlocal enabledelayedexpansion
for /l %%i in (1 1 1000000) do (
goto :eof
)
pause
运行后发现并不能马上退出FOR循环。
解释
for语句体在执行过程中第一次遇到goto语句时,会忽略其后面所有的语句,并只进行循环变量的迭代。
迭代完成后,循环变量重新变为为定义的状态,然后控制权由for语句转移给goto语句。
也就是说goto命令总是最后被执行,而且只会执行一次。
例子:
@echo off
setlocal enabledelayedexpansion
for /l %%i in (1,1,10) do (
set /a a=0
:loop
echo %a%
set /a a=a+1
if not "%%i"=="!a!" goto loop
)
pause
运行后发现进入无限循环。
原因在于执行goto时迭代过程已经完成,%%i(预处理后是%i)是未定义的,%%i不可能和!a!相等。
3、可以在FOR语句中使用Call语句来调用内部或外部的标签
例子:
@echo off
setlocal enabledelayedexpansion
for /l %%i in (1,1,10) do (
set a=%%i
call :loop
:loop
echo !a!
)
注意上面的例子中echo !a!会被重复运行一次。
之所以不直接用echo %%i是因为call“看不见”%%i。 |
|