windowscmd中判断命令是否执行成功的方法

Written by

in

文章目录
  • %ERRORLEVEL% 的延迟展开问题在批处理脚本(.bat 或 .cmd)中,若在代码块(如 if 或 for)内部使用 %ERRORLEVEL%,需启用延迟扩展: setlocal enabledelayedexpansion 命令 if !ERRORLEVEL! EQU 0 ( echo 成功 ) 部分命令的特殊返回值某些命令可能不遵循 0=成功 的规则(例如 choice.exe),需查阅具体命令文档。 静默执行命令若不想显示命令的输出,可使用重定向: 命令 >nul 2>&1 && echo 成功 || echo 失败
  • @echo off setlocal enabledelayedexpansion echo 正在尝试创建目录… mkdir C:test_dir if !ERRORLEVEL! EQU 0 ( echo 目录创建成功 ) else ( echo 目录创建失败,错误码: !ERRORLEVEL! ) endlocal
  • 用%errorlevel%变量获取上一条命令的返回值。 cmd> cd /d d: cmd> if %errorlevel% == 0 ( echo successfully ) else ( echo failed)
  • 方法说明 %ERRORLEVEL%直接检查环境变量,适合复杂逻辑判断 && 和 || 简化代码,适合快速判断成功/失败 延迟扩展 !ERRORLEVEL!在代码块内部使用时必须启用,避免因变量展开时机问题导致判断错误 掌握这些方法后,可以在批处理脚本中灵活控制命令执行流程! 您可能感兴趣的文章: 批处理中屏蔽错误信息 nul 2>nul 的用法 (cmd>nul空格2>nul) dos中一些常用命令的errorlevel返回值 关于bat脚本中的命令状态码相关的%errorlevel%变量问题 bat中errorlevel与%errorlevel%的区别 IF-ERRORLEVEL使用方法
  • 目录
    • 基础用法
      • 1. 直接检查 %ERRORLEVEL%
      • 示例
    • 进阶用法
      • 2. 使用 && 和 || 简化逻辑
      • 示例
    • 注意事项
      • 完整批处理脚本示例
        • windows cmd 中判断命令执行成功
          • 脚本中搭配goto使用
          • 参考if命令的帮助文档
        • 总结

          在 Windows 的 CMD 命令提示符中,可以通过检查 %ERRORLEVEL% 环境变量来判断上一个命令是否执行成功。大多数命令执行成功后返回 0,失败时返回非零值(具体值取决于命令类型)。下面就为大家介绍一下

          命令
          if %ERRORLEVEL% EQU 0 (
              echo 命令执行成功
          ) else (
              echo 命令执行失败,错误码: %ERRORLEVEL%
          )

          ping -n 1 www.google.com
          if %ERRORLEVEL% EQU 0 (
              echo 网络连通
          ) else (
              echo 网络不可达
          )

          • &&:仅当命令成功时执行后续操作
          • ||:仅当命令失败时执行后续操作
          命令 && (
              echo 成功后的操作
          ) || (
              echo 失败后的操作
          )

          copy file1.txt file2.txt && (
              echo 文件复制成功
          ) || (
              echo 文件复制失败
          )

          %ERRORLEVEL% 的延迟展开问题在批处理脚本(.bat 或 .cmd)中,若在代码块(如 if 或 for)内部使用 %ERRORLEVEL%,需启用延迟扩展:

          setlocal enabledelayedexpansion
          命令
          if !ERRORLEVEL! EQU 0 (
              echo 成功
          )

          部分命令的特殊返回值某些命令可能不遵循 0=成功 的规则(例如 choice.exe),需查阅具体命令文档。

          静默执行命令若不想显示命令的输出,可使用重定向:

          命令 >nul 2>&1 && echo 成功 || echo 失败

          @echo off
          setlocal enabledelayedexpansion
          
          echo 正在尝试创建目录...
          mkdir C:test_dir
          
          if !ERRORLEVEL! EQU 0 (
              echo 目录创建成功
          ) else (
              echo 目录创建失败,错误码: !ERRORLEVEL!
          )
          
          endlocal

          用%errorlevel%变量获取上一条命令的返回值。

          cmd> cd /d d:
          cmd> if %errorlevel% == 0 ( echo successfully ) else ( echo failed)
          

          好多脚本中判断命令执行是否成功时,搭配goto使用(貌似是为了在cmd脚本中实现函数功能的解决办法)。

          @ECHO OFF
          cd /d d:
          IF %errorlevel% NEQ 0 GOTO ERROR
          IF %errorlevel% EQU 0 GOTO OK
          
          :OK
          ECHO command success
          GOTO END
          
          :ERROR
          ECHO command failed
          GOTO END
          
          :END
          @ECHO ON
          

          执行很多条命令的情况(a.bat):

          @ECHO OFF
          cd /d c:
          IF %errorlevel% NEQ 0 GOTO ERROR
          ECHO 进入C盘
          
          cd /d d:
          IF %errorlevel% NEQ 0 GOTO ERROR
          ECHO 进入D盘
          
          cd /d dz:
          IF %errorlevel% NEQ 0 GOTO ERROR
          ECHO 进入DZ盘
          
          cd /d c:
          IF %errorlevel% NEQ 0 GOTO ERROR
          ECHO 进入C盘
          
          :OK
          ECHO command success
          GOTO END
          
          :ERROR
          ECHO command failed
          GOTO END
          
          :END
          @ECHO ON
          

          cmd>if /?
          执行批处理程序中的条件处理。
          
          IF [NOT] ERRORLEVEL number command
          IF [NOT] string1==string2 command
          IF [NOT] EXIST filename command
          
            NOT               指定只有条件为 false 的情况下,Windows 才
                              应该执行该命令。
          
            ERRORLEVEL number 如果最后运行的程序返回一个等于或大于
                              指定数字的退出代码,指定条件为 true。
          
            string1==string2  如果指定的文字字符串匹配,指定条件为 true。
          
            EXIST filename    如果指定的文件名存在,指定条件为 true。
          
            command           如果符合条件,指定要执行的命令。如果指定的
                              条件为 FALSE,命令后可跟 ELSE 命令,该命令将
                              在 ELSE 关键字之后执行该命令。
          
          ELSE 子句必须出现在同一行上的 IF 之后。例如:
          
              IF EXIST filename. (
                  del filename.
              ) ELSE (
                  echo filename. missing.
              )
          
          由于 del 命令需要用新的一行终止,因此以下子句不会有效:
          
          IF EXIST filename. del filename. ELSE echo filename. missing
          
          由于 ELSE 命令必须与 IF 命令的尾端在同一行上,以下子句也
          不会有效:
          
              IF EXIST filename. del filename.
              ELSE echo filename. missing
          
          如果都放在同一行上,以下子句有效:
          
              IF EXIST filename. (del filename.) ELSE echo filename. missing
          
          如果命令扩展被启用,IF 会如下改变:
          
              IF [/I] string1 compare-op string2 command
              IF CMDEXTVERSION number command
              IF DEFINED variable command
          
          其中, compare-op 可以是:
          
              EQU - 等于
              NEQ - 不等于
              LSS - 小于
              LEQ - 小于或等于
              GTR - 大于
              GEQ - 大于或等于
          
          而 /I 开关(如果指定)说明要进行的字符串比较不分大小写。
          /I 开关可以用于 IF 的 string1==string2 的形式上。这些
          比较都是通用的;原因是,如果 string1 和 string2 都是
          由数字组成的,字符串会被转换成数字,进行数字比较。
          
          CMDEXTVERSION 条件的作用跟 ERRORLEVEL 的一样,除了它
          是在跟与命令扩展有关联的内部版本号比较。第一个版本
          是 1。每次对命令扩展有相当大的增强时,版本号会增加一个。
          命令扩展被停用时,CMDEXTVERSION 条件不是真的。
          
          如果已定义环境变量,DEFINED 条件的作用跟 EXIST 的一样,
          除了它取得一个环境变量,返回的结果是 true。
          
          如果没有名为 ERRORLEVEL 的环境变量,%ERRORLEVEL%
          会扩充为 ERROLEVEL 当前数值的字符串表达式;否则,你会得到
          其数值。运行程序后,以下语句说明 ERRORLEVEL 的用法:
          
              goto answer%ERRORLEVEL%
              :answer0
              echo Program had return code 0
              :answer1
              echo Program had return code 1
          
          你也可以使用以上的数字比较:
          
              IF %ERRORLEVEL% LEQ 1 goto okay
          
          如果没有名为 CMDCMDLINE 的环境变量,%CMDCMDLINE%
          将在 CMD.EXE 进行任何处理前扩充为传递给 CMD.EXE 的原始
          命令行;否则,你会得到其数值。
          
          如果没有名为 CMDEXTVERSION 的环境变量,
          %CMDEXTVERSION% 会扩充为 CMDEXTVERSION 当前数值的
          字串符表达式;否则,你会得到其数值。
          

          方法说明 %ERRORLEVEL%直接检查环境变量,适合复杂逻辑判断

          && 和 || 简化代码,适合快速判断成功/失败

          延迟扩展 !ERRORLEVEL!在代码块内部使用时必须启用,避免因变量展开时机问题导致判断错误

          掌握这些方法后,可以在批处理脚本中灵活控制命令执行流程!

          您可能感兴趣的文章:

          • 批处理中屏蔽错误信息 nul 2>nul 的用法 (cmd>nul空格2>nul)
          • dos中一些常用命令的errorlevel返回值
          • 关于bat脚本中的命令状态码相关的%errorlevel%变量问题
          • bat中errorlevel与%errorlevel%的区别
          • IF-ERRORLEVEL使用方法

          站内搜索