|
|
本帖最后由 redyear2026 于 2026-2-13 23:24 编辑
借本帖主题多说几句,其实扫描一下中外网站,会有大把有关本帖主题的老帖,从中推敲或实测,会很容易得出结论 - 即唯有采用 goto 方法才可有效跳出 for 循环体,但对于 for /l %%i 类型循环,goto 效果仍有内生缺陷。
简言之》在 for /f %%i,for %%i,for /d %%i,for /r %%i 几个类型的循环中,可用 goto 实现 '立即跳出' ;而在 for /l %%i 类型的循环中,即使采用 goto 仍须 '等待预定循环次数被全部满足后' 才能退出循环。
先看用 goto 跳出 for /f %%i 类型循环的示例代码
- @echo off
- for /f "delims=" %%s in (a.txt) do if "%%s"=="123" goto :break
- echo,未发现目标文本行
- pause&exit/b
- :break
- echo,发现目标文本行
- pause&exit/b
复制代码
再看用 goto 跳出 for %%i, for /r %%i, for /d %%i 类型循环的示例代码(用 for %%i 同类概之)
- @echo off
- for %%i in (*.txt) do if "%%i"=="123.txt" goto :break
- echo,当前目录未发现目标文本文件
- pause&exit/b
- :break
- echo,当前目录发现目标文本文件
- pause&exit/b
复制代码
另注: 有关 for /l %%i 类型循环用法中的几个 '看点'
一。最常见的已如上述 》即使在循环体内已经设定 goto 尽早跳出,但仍要陪伴循环次数跑满(或曰 '空转到底')
- @echo off &echo,%time%
- for /l %%i (1,1,100000000) do set "n=%%i" &if %%i equ 5 goto :break
- exit/b
- :break
- echo,%n%
- echo,%time%
- pause&exit/b
复制代码
二。以下循环参数被认为非法而自动取消,即不会执行循环体内代码
- @echo off
- for /l %%i in (-1,-1,1) do (echo,%%i&exit/b)
- pause&exit/b
复制代码
三。以下循环参数会导致无限循环,即只能用ctrl+c终止当前脚本(即使循环体内仅有一句 '强行退出')
- @echo off
- for /l %%i in (-1,0,1) do (exit/b)
- exit/b
复制代码
|
评分
-
查看全部评分
|