Skip to content

cmd 中 if 条件判断

在 Windows 批处理脚本(CMD)中,if 命令是条件判断的核心工具,用于根据不同的条件执行分支命令。其语法灵活且功能强大,以下是详细解析及实用示例。


if 命令的三种基础用法

判断上条命令的退出码(ERRORLEVEL

batch
if [not] errorlevel 数字 待执行命令
  • 作用:检查上一条命令的返回码是否大于等于指定数字(非精确匹配。

  • 示例:

    batch
    net user test
    if errorlevel 1 echo 上条命令执行失败!  
    :: 若 net user 返回码 ≥1(如 1,2,5),均触发此提示

字符串比较

batch
if [not] "字符串1"==[选项] "字符串2" 待执行命令
  • 关键点:

    • 默认区分大小写,添加 /i 选项可忽略大小写(如 if /i "A"=="a")。
    • 变量或含空格的字符串需用双引号包裹,避免解析错误。
  • 示例:

    batch
    set /p input=请输入 yes 或 no: 
    if /i "%input%"=="yes" (echo 确认) else echo 取消

检查文件/目录是否存在

batch
if [not] exist "路径" 待执行命令
  • 用途:验证文件或文件夹是否存在,常用于依赖资源检测。

  • 示例:

    batch
    if exist "C:\data\log.txt" (
        echo 日志文件存在 
    ) else (
        echo 文件缺失,正在创建...
        type nul > "C:\data\log.txt"
    )

进阶用法与技巧

嵌套 if 与多条件判断

  • 使用括号 () 组合多条命令,支持 else 分支:

    batch
    if exist "D:\backup\" (
        echo 备份目录已存在
    ) else (
        mkdir "D:\backup"
        if errorlevel 1 echo 创建失败! 
    )

变量检查(defined

batch
if defined 变量名 待执行命令
  • 场景:判断变量是否被赋值,避免未定义变量导致的错误。

    batch
    set name=Admin 
    if defined name echo 用户名: %name%

结合 goto 实现流程跳转

batch
if %errorlevel% neq 0 goto error_handler
:error_handler
echo 错误代码: %errorlevel%
exit /b 1

常见问题与避坑指南

  • errorlevel 判断误区
    • if errorlevel 1 表示“返回码 ≥1”,而非“等于1”。精确匹配需用 if %errorlevel% equ 1
    • 多命令执行时,需启用变量延迟扩展(setlocal enabledelayedexpansion)确保实时获取 errorlevel
  • 字符串比较的空格问题
    • 输入值末尾含空格可能导致误判,用双引号统一格式:

      batch
      if "%var%"=="value"   :: 避免 "value " 被误判

数值比较运算符

运算符含义示例
equ等于if 10 equ %num%
neq不等于if %level% neq 0
gtr大于if %count% gtr 100
lss小于if %size% lss 1024

实用场景示例

检查管理员身份

检查是否以管理员身份运行,是继续执行,不是则退出 cmd 窗口。

batch
net session >nul 2>&1 
if %errorlevel% neq 0 (
    echo 请右键【以管理员身份运行】此脚本!
    pause
    exit
)

根据输入执行不同程序

batch
set /p choice=启动程序 (1=记事本, 2=计算器): 
if "%choice%"=="1" start notepad.exe 
if "%choice%"=="2" start calc.exe

递归检查目录并创建

batch
if not exist "C:\reports\2024" (
    mkdir "C:\reports\2024"
    if errorlevel 1 echo 目录创建失败! && exit /b 1 
)

注意事项总结

  • 括号与空格:if 后的条件与括号间需有空格(如 if exist file (......))。
  • 错误码范围:errorlevel 为 0~255,超范围将取模(如 256 变为 0)。
  • 嵌套限制:避免多层嵌套导致逻辑混乱,可用 goto 拆分流程。

通过灵活组合 iferrorlevel 及流程控制命令,可构建健壮的批处理脚本,适应各类自动化需求。