无忧启动论坛

标题: 批处理循环中实现break和continue [打印本页]

作者: hlowld    时间: 昨天 09:30
标题: 批处理循环中实现break和continue
本帖最后由 hlowld 于 2026-2-12 10:03 编辑

在不启用变量延迟扩展且不使用goto的前提下,循环块内变量不会实时更新,无法用作是否执行循环代码的判断,改用verify设置errorlevel,用 if errorlevel或if not errorlevel来判断是否执行循环代码。示例代码如下:

@echo off
echo 模拟continue,触发时跳过本次继续循环
for /l %%i in (1, 1, 5) do (
        verify >nul 2>nul
        if %%i equ 3 (verify bad >nul 2>nul & echo 触发continue,跳过本次继续循环)
        if not errorlevel 1 (
                rem 循环代码
                echo 执行 %%i
        )
)
echo 模拟break,触发时终止循环
verify >nul 2>nul
for /l %%i in (1, 1, 5) do (
        if %%i equ 3 (verify bad >nul 2>nul & echo 触发break,终止循环)
        if not errorlevel 1 (
                rem 循环代码
                echo 执行 %%i
        )
)
pause
exit




作者: yyz2191958    时间: 昨天 09:43
不明觉厉
作者: lixiangliuyi    时间: 昨天 09:43
批处理还是复杂了。感觉换成python把,
作者: a66    时间: 昨天 09:54
了解
作者: it323    时间: 昨天 09:56
感谢分享!
作者: w11y11    时间: 昨天 10:05
不错。。。。。。。。。。。
作者: hhcha    时间: 昨天 10:18
感谢分享!
作者: wn168cn@163.com    时间: 昨天 10:19
支持原创
作者: cutebe    时间: 昨天 10:22
感谢分享!除了verify,不知其他命令是否可行?
作者: 1e3e    时间: 昨天 10:56
谢谢分享,学批处理7年有余,我小白还不会写批处理,仰慕大神
作者: guong    时间: 昨天 11:45
谢谢分享!
作者: lzh730405    时间: 昨天 11:49
感谢分享
作者: lzh730405    时间: 昨天 11:49
又学习到了
作者: wwwlhp    时间: 昨天 16:11
多谢分享!!!
作者: redyear2026    时间: 昨天 19:19
本帖最后由 redyear2026 于 2026-2-12 22:19 编辑

批处理脚本的 for 语块能否实现真正的 break,迄今只有采用 goto 方法被实测真正有效(且只能一次性跳出所有外包循环体),一楼的示例只是一个假象,可用以下代码验证

  1. @echo off
  2. for /l %%i in (1, 1, 5) do (
  3.     if %%i equ 3 (verify bad >nul 2>nul & echo,尝试触发break,终止循环)
  4.     if not errorlevel 1 (echo,执行 %%i)
  5.     echo,验证每次循环序号=%%i
  6. )
  7. pause&exit/b
复制代码

用 goto 方法实现真正的 break,见如下示例代码
  1. @echo off
  2. for /l %%i in (1, 1, 5) do (
  3.     if %%i equ 3 (set "l=%%i" &goto :b)
  4.    echo,验证每次循环序号=%%i
  5. )
  6. :b
  7.    echo,%l%
  8. pause&exit/b
复制代码

至于在 for 语块中实现 continue,有更简单的方法可见如下代码

  1. @echo off
  2. for /l %%i in (1, 1, 5) do if %%i neq 3 (
  3.     rem 循环代码
  4.     echo,执行 %%i
  5. )
  6. pause&exit/b
复制代码

作者: pda8888    时间: 昨天 21:59
redyear2026 发表于 2026-2-12 19:19
批处理脚本的 for 语块能否实现真正的 break,迄今只有采用 goto 方法被实测真正有效(且只能一次性跳出所 ...

代码块里,即()包裹的代码里,用goto语句,将会立即终止代码块的执行。
作者: guimei5320    时间: 昨天 23:22
本帖最后由 guimei5320 于 2026-2-12 23:24 编辑

这个主要核心就是命令执行的返回值。
楼主的代码,应该是能实现的。
因为没有重置errorlevel为0,所以就不执行循环体了。一定要看清verify命令的位置。
其他命令也可以实现,主要是需要确定errorlevel的返回值。

作者: handsome_xiang    时间: 昨天 23:49
学习一下




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3