goto 语句跳不出无限循环,但之后的循环体表达式不执行了,只执行步进和判断

下面代码当if !n!==100的条件成立时会马上跳 for循环执行"echo count=%n%"语句,这是毫无疑问的。
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%i in (1,1,1000) do (
  3. set /a n+=1
  4. if !n!==100 goto :end
  5. )
  6. :end
  7. echo count=%n%
  8. pause
复制代码
而将for的步进改为0让for 无限循环,则当if !n!==100的条件成立时却不能跳 for循环。
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%i in (1,0,1000) do (
  3. set /a n+=1
  4. if !n!==100 goto :end
  5. )
  6. :end
  7. echo count=%n%
  8. pause
复制代码
经测试当n到达100时脚本暂停了。这是为什么呢?

已解决,原因是当goto的条件成立时不会马上跳 for循环,要等for全部循环完才执行,这期间所有for循环体内的执行语句(do后面的语句)不会执行,只执行in后面括号内的加步进和判断是否到达for循环的终点语句。所以当%%i到达100时脚本好象暂停了,其实是这时批处理只执行(1,0,1000)的语句,因为是 无限循环语句,所以永远跳不 循环。而call和exit命令则不受此限制。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值