windows批处理if语句支持字符串比较(==)、数值比较(gtr/lss等)、文件存在性检测(exist)和错误级别判断(errorlevel),需注意引号使用、空格处理及errorlevel降序判断。
windows 批处理脚本中实现条件判断,核心靠 if 语句,不支持布尔表达式或 && || 运算符,但能通过字符串比较、数值判断、文件存在性检测、错误级别检查和嵌套结构完成常见逻辑分支。
字符串是否相等
用 == 判断两个字符串是否完全一致(默认区分大小写)。变量需用英文双引号包裹,避免空格或特殊字符引发语法错误。
- @echo off
- set "user_input=abc"
- if "%user_input%"=="abc" (echo 输入正确) else (echo 输入错误)
注意:赋值时 set var=value 两侧不能有空格;引用时统一用 %var% 或 "%var%"(含空格路径必须加引号)。
数值大小比较
用 gtr(大于)、lss(小于)、equ(等于)、geq(大于等于)等运算符。直接写变量名,不加引号。
- @echo off
- set num=42
- if %num% gtr 100 (echo 超过一百) else if %num% gtr 10 (echo 十到一百之间) else (echo 十及以下)
多分支可写在一行,也可分行——分行写法更易读、支持多条命令,但部分老旧系统兼容性略弱。
判断文件或目录是否存在
用 if exist 检查路径有效性。路径含空格或特殊符号时,必须用英文双引号包裹。
- @echo off
- if exist "C:\Program Files" (echo 目录存在) else (echo 目录不存在)
- if exist "D:\data\config.ini" (echo 配置文件就绪) else (echo 缺少配置文件,退出) && exit /b 1
该判断不区分文件还是文件夹,只要路径有效即为真;若需区分,需结合 dir /a:d 或 dir /a:-d 配合 errorlevel 使用。
根据上一条命令是否成功做判断
很多命令执行后会设置 errorlevel,成功通常返回 0,失败返回非零值。用 if errorlevel N 表示“错误级别 ≥ N”,所以多个等级要从高往低写。
- @echo off
- ping -n 1 www.example.com >nul
- if errorlevel 1 (echo 网络不通) else (echo 网络通畅)
- xcopy "src\*" "dst\" /y >nul
- if errorlevel 4 (echo 复制失败:初始化错误) else if errorlevel 2 (echo 复制警告:有文件跳过) else (echo 复制完成)
也可用 if %errorlevel% equ 0 的写法,更直观,但需确保在命令执行后立即读取,中间不能插入其他命令。











