[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

如何尽快跳出 for /L 循环》又是一个经典问题。
外网dostips.com就此曾有多次讨论,现简化出三个题型说明一些思路的对比结果,给本坛有兴趣者品味参考...
基本上是毙掉了在循环体内 call :xxx 子过程的方法,因其低效繁复。
个人感觉题型一类似 do-while 循环结构,也许更有实用价值。
  1. ::题型一,采用开关变量 + if 语块包裹循环体》耗时约2s
  2. @echo off
  3. set "#break="
  4. for /L %%n in (1,1,320000) do if not defined #break (
  5.    REM ”其他命令“
  6.    set "n=%%n" &set #break=1)
  7. echo,%n%
  8. ::exit/b
  9. ::题型二,采用 if 语块包裹循环体》约耗时1.5s
  10. @echo off
  11. for /L %%n in (1,1,320000) do if %%n equ 1 (
  12.     REM ”其他命令“
  13.     set "n=%%n" &goto[outLoop])
  14. :[outLoop]
  15. echo,%n%
  16. ::exit/b
  17. ::题型三,不采用 if 语块包裹循环体》耗时约12s
  18. @echo off
  19. for /L %%n in (1,1,3200000) do (
  20. REM ”其他命令“
  21. set "n=%%n" &goto[outLoop])
  22. :[outLoop]
  23. echo,%n%
  24. ::exit/b
复制代码
1

评分人数

    • 77七: 感谢分享技术 + 1

TOP


代码已作如下订正。看那些纯P老玩家已经不深究 for/L 能否立即退出循环的问题了,切磋的只是如何“尽快”退出的“妙计高招”。for/L 的循环量一旦过万,钝感即现,上十万就相当吃力了... 好在批处理脚本勉为其难的企业级(大数量规模)应用,都有更高效的成熟解决方案,仅脚本而言,前有vbs/jscript/mshta/awk/...,后有powershell/python/... 着实省去了以往纯P非要在“螺蛳壳里作道场”的艰难曲折了...
  1. ::题型一》采用开关变量+if 语块包裹循环体 不用goto》耗时约2s
  2. set "#break="
  3. for /L %%n in (1,1,320000) do if not defined #break (set "n=%%n" &set #break=1)
  4. echo,%n%
  5. pause &exit/b
  6. ::题型二》采用 goto+if 语块包裹循环体》耗时1.6s
  7. for /L %%n in (1,1,320000) do if %%n equ 1 (set "n=%%n" &goto[outLoop])
  8. :[outLoop]
  9. echo,%n%
  10. pause &exit/b
  11. ::题型三》采用 goto,不采用 if 语块包裹循环体》耗时约1s
  12. for /L %%n in (1,1,320000) do (set "n=%%n" &goto[outLoop])
  13. :[outLoop]
  14. echo,%n%
  15. pause &exit/b
复制代码

TOP

返回列表