菜鸟科技网

如何用cmd命令精准判断文件或系统状态?

我将从最核心的 IF 命令讲起,然后扩展到其他相关的判断方法。

如何用cmd命令精准判断文件或系统状态?-图1
(图片来源网络,侵删)

核心判断:IF 命令

IF 命令是 CMD 脚本中进行逻辑判断的基础,它的基本语法是 IF [NOT] condition command

IF 命令主要有三种判断方式:

判断字符串是否相等

这是最常见的用法,用于比较两个文本字符串是否相同。

语法:

如何用cmd命令精准判断文件或系统状态?-图2
(图片来源网络,侵删)
IF [NOT] ["字符串1"] == ["字符串2"] (命令)
  • NOT:可选,表示“不等于”。
  • 字符串可以用双引号 括起来,如果字符串本身包含空格或特殊字符,则必须使用引号。
  • 是严格区分大小写的,如果需要不区分大小写的比较,请使用 EQU(见下文)。

示例:

@echo off
set /p user_input=请输入 "yes" 或 "no": 
:: 判断用户输入是否为 "yes" (区分大小写)
IF "%user_input%" == "yes" (
    echo 你输入的是 yes。
) ELSE (
    echo 你输入的不是 yes。
)
:: 判断用户输入是否为 "YES" (不区分大小写)
:: /I 表示不区分大小写
IF /I "%user_input%" == "YES" (
    echo 你输入的是 YES (不区分大小写)。
) ELSE (
    echo 你输入的不是 YES (不区分大小写)。
)
:: 使用 NOT 判断
IF NOT "%user_input%" == "no" (
    echo 你输入的不是 no。
) ELSE (
    echo 你输入的是 no。
)
pause

判断数值是否相等

用于比较两个数字是否相等。

语法:

IF [NOT] 数字1 EQU 数字2 (命令)
  • EQU (EQual):等于
  • NEQ (Not EQual):不等于
  • LSS (LeSS than):小于
  • LEQ (Less than or EQual):小于或等于
  • GTR (GreaTer than):大于
  • GEQ (Greater than or EQual):大于或等于

示例:

如何用cmd命令精准判断文件或系统状态?-图3
(图片来源网络,侵删)
@echo off
set /p score=请输入你的分数 (0-100):
IF %score% GEQ 90 (
    echo 优秀!
) ELSE IF %score% GEQ 80 (
    echo 良好。
) ELSE IF %score% GEQ 60 (
    echo 及格。
) ELSE (
    echo 不及格。
)
:: 注意:CMD 没有原生的 ELSE IF,需要用嵌套的 IF 来实现
:: 上面的 ELSE IF 实际上是 ELSE ( IF ... )
pause

判断文件或目录是否存在

这是非常实用的功能,用于检查文件或文件夹是否存在。

语法:

IF [NOT] EXIST 路径 (命令)
  • EXIST:检查指定的路径是否存在,路径可以是文件或目录。

示例:

@echo off
set "file_to_check=C:\Windows\System32\cmd.exe"
IF EXIST "%file_to_check%" (
    echo 文件 %file_to_check% 存在。
) ELSE (
    echo 文件 %file_to_check% 不存在。
)
set "dir_to_check=C:\temp"
IF NOT EXIST "%dir_to_check%" (
    echo 目录 %dir_to_check% 不存在,正在创建...
    mkdir "%dir_to_check%"
    echo 目录创建成功。
) ELSE (
    echo 目录 %dir_to_check% 已存在。
)
pause

扩展判断:ERRORLEVEL

ERRORLEVEL 是一个特殊的系统变量,它存储了上一个程序或命令执行后的退出代码(Exit Code)。

  • 通常约定:执行成功时,ERRORLEVEL0;执行失败时,为非零值。
  • IF 命令可以检查 ERRORLEVEL 的值,但它有一个陷阱IF ERRORLEVEL 1 的意思是“ERRORLEVEL 大于或等于 1”,而不是“等于 1”。

语法:

IF [NOT] ERRORLEVEL 数字 (命令)

示例:

@echo off
echo 尝试 ping 一个不存在的地址...
ping -n 1 192.0.2.1 > nul
:: ping 失败,ERRORLEVEL 通常为 1
IF ERRORLEVEL 1 (
    echo Ping 失败,ERRORLEVEL 大于或等于 1。
)
:: 正确的判断方式(检查是否等于0)
:: IF NOT ERRORLEVEL 0 ... 也可以
IF %ERRORLEVEL% EQU 0 (
    echo Ping 成功。
) ELSE (
    echo Ping 失败。
)
:: 错误的判断方式(检查是否等于1)
:: IF ERRORLEVEL 1 (echo ...) 会把 2, 3, 4... 的情况也包含进来
:: 所以要判断精确值,最好用 %ERRORLEVEL% EQU 数字
pause

综合示例:一个实用的备份脚本

下面这个脚本结合了 IFERRORLEVEL,实现了“如果目标文件夹不存在则创建,然后复制文件,并最后判断复制是否成功”的逻辑。

@echo off
set "source_folder=C:\Users\YourUser\Documents"
set "backup_folder=D:\MyBackup\Documents"
:: 1. 判断备份目录是否存在,如果不存在则创建
IF NOT EXIST "%backup_folder%" (
    echo [信息] 备份目录不存在,正在创建: %backup_folder%
    mkdir "%backup_folder%"
    :: 检查创建目录是否成功
    IF ERRORLEVEL 1 (
        echo [错误] 创建备份目录失败!请检查权限或磁盘空间。
        pause
        exit /b
    )
    echo [信息] 备份目录创建成功。
)
:: 2. 执行复制操作
echo [信息] 开始从 "%source_folder%" 备份到 "%backup_folder%"...
xcopy "%source_folder%" "%backup_folder%" /E /I /H /Y > nul
:: 3. 检查 xcopy 的执行结果
:: xcopy 成功时,ERRORLEVEL 为 0
IF ERRORLEVEL 1 (
    echo [错误] 备份过程发生错误!
) ELSE (
    echo [成功] 备份完成!
)
pause

脚本解释:

  1. IF NOT EXIST "%backup_folder%": 首先检查备份文件夹是否存在。
  2. mkdir "%backup_folder%": 如果不存在,就创建它。
  3. IF ERRORLEVEL 1: 紧接着检查 mkdir 命令是否执行成功,如果失败(例如没有权限),脚本会打印错误信息并退出。
  4. xcopy ...: 执行文件复制。/E /I /H /Y 是常用参数,表示复制所有子目录(包括空目录)、目标是目录则自动创建、复制隐藏/系统文件、确认覆盖。
  5. IF ERRORLEVEL 1: 检查 xcopy 命令是否执行成功。xcopy 失败(例如源文件夹不存在),ERRORLEVEL 会是非零值,脚本会提示错误。

其他相关判断技巧

使用 DEFINED 变量检查

判断一个变量是否已经被定义。

语法:

IF DEFINED 变量名 (命令)

示例:

@echo off
set "my_var=hello"
IF DEFINED my_var (
    echo 变量 my_var 已定义,其值为: %my_var%
)
IF NOT DEFINED another_var (
    echo 变量 another_var 未定义。
)
pause

使用 DEFINED 进行空值检查

一个变量即使被定义,也可能没有被赋值(即为空)。DEFINED 可以检查变量是否存在,而 %VAR% 本身在未定义时会为空,所以可以结合使用。

示例:

@echo off
set "empty_var="
:: 检查变量是否被定义(即使值为空)
IF DEFINED empty_var (
    echo 变量 empty_var 已定义。
) ELSE (
    echo 变量 empty_var 未定义。
)
:: 检查变量是否有值(非空)
:: 注意:如果一个变量未定义,%undefined_var% 也会被视为空
IF "%empty_var%" == "" (
    echo 变量 empty_var 的值为空。
) ELSE (
    echo 变量 empty_var 的值不为空。
)
pause
判断类型 命令语法 说明
字符串判断 IF ["str1"] == ["str2"] 区分大小写,推荐用引号
不区分大小写 IF /I ["str1"] == ["str2"] 忽略大小写进行比较
数值判断 IF %num1% EQU %num2% EQU(=), NEQ(≠), LSS(<), LEQ(≤), GTR(>), GEQ(≥)
文件/目录存在 IF EXIST "路径" 检查文件或文件夹是否存在
命令执行结果 IF ERRORLEVEL num 注意:是“大于或等于”
精确错误码 IF %ERRORLEVEL% EQU num 推荐用法,用于精确判断错误码
变量是否定义 IF DEFINED varname 检查变量是否已定义,即使值为空也返回真

掌握这些 IF 命令的用法,你就可以编写出功能强大、能够处理各种情况的 CMD 批处理脚本了。

分享:
扫描分享到社交APP
上一篇
下一篇