下面代码当if !n!==100的条件成立时会马上跳出for循环执行"echo count=%n%"语句,这是毫无疑问的。- @echo off&setlocal enabledelayedexpansion
- for /l %%i in (1,1,1000) do (
- set /a n+=1
- if !n!==100 goto :end
- )
- :end
- echo count=%n%
- pause
复制代码 而将for的步进改为0让for无限循环,则当if !n!==100的条件成立时却不能跳出for循环。- @echo off&setlocal enabledelayedexpansion
- for /l %%i in (1,0,1000) do (
- set /a n+=1
- if !n!==100 goto :end
- )
- :end
- echo count=%n%
- pause
复制代码 经测试当n到达100时脚本暂停了。这是为什么呢?
已解决,原因是当goto的条件成立时不会马上跳出for循环,要等for全部循环完才执行,这期间所有for循环体内的执行语句(do后面的语句)不会执行,只执行in后面括号内的加步进和判断是否到达for循环的终点语句。所以当%%i到达100时脚本好象暂停了,其实是这时批处理只执行(1,0,1000)的语句,因为是无限循环语句,所以永远跳不出循环。而call和exit命令则不受此限制。 |