欢迎来到 CMD 脚本第二课!今天我们将学习如何用 if
进行条件判断,以及用 for
实现循环操作,让你的脚本更智能、更高效。
1. 条件判断(if
语句)
(1) 基本语法
if 条件 (
命令
) else (
其他命令
)
示例:检查文件是否存在
@echo off
if exist "C:\test.txt" (
echo 文件存在!
) else (
echo 文件不存在!
)
pause
(2) 比较数值/字符串
比较方式 | 语法 | 示例 |
---|---|---|
等于 | == |
if "%var%"=="yes" |
不等于 | not == |
if not "%var%"=="no" |
数值比较 | equ , gtr , lss |
if 10 gtr 5 (大于) |
示例:用户输入判断
@echo off
set /p choice=是否继续?(y/n):
if /i "%choice%"=="y" (
echo 用户选择了继续
) else if "%choice%"=="n" (
echo 用户选择了退出
) else (
echo 输入无效
)
pause
说明:
/i
表示忽略大小写(如y
和Y
均可匹配)。
2. 循环操作(for
语句)
(1) 遍历文件
列出当前目录所有 .txt
文件:
@echo off
for %%f in (*.txt) do (
echo 找到文件:%%f
)
pause
关键点:
- 循环变量用
%%f
(在命令行直接运行时要改为%f
)。 (*.txt)
是通配符,匹配所有文本文件。
(2) 数字范围循环
循环 5 次:
@echo off
for /l %%i in (1,1,5) do (
echo 当前次数:%%i
)
pause
参数解释:
(1,1,5)
= 从1
开始,步长1
,到5
结束。
(3) 逐行读取文件
读取 data.txt
的每一行:
@echo off
for /f "tokens=*" %%a in (data.txt) do (
echo 当前行内容:%%a
)
pause
说明:
tokens=*
表示读取整行(默认按空格分割,可调整)。
3. 综合案例
批量重命名文件(.txt
→ .bak
)
@echo off
setlocal enabledelayedexpansion
for %%f in (*.txt) do (
set "old=%%f"
set "new=!old:.txt=.bak!"
ren "!old!" "!new!"
echo 已重命名:!old! → !new!
)
pause
关键技巧:
setlocal enabledelayedexpansion
启用延迟变量扩展(避免循环内变量值问题)。!var!
代替%var%
获取动态更新的变量值。
4. 错误处理
(1) 检查命令是否成功
@echo off
dir C:\nonexistent 2>nul
if %errorlevel% neq 0 (
echo 命令执行失败!
)
pause
说明:
%errorlevel%
存储上一条命令的退出码(0
表示成功)。2>nul
隐藏错误信息。
5. 练习任务
- 写一个脚本:检查
C:\Windows
是否存在,如果存在则列出其中的.exe
文件,否则报错。 - 进阶挑战:让用户输入一个路径,统计该路径下有多少个
.jpg
文件。
练习答案
任务1:检查目录并列出文件
@echo off
if exist "C:\Windows" (
echo 正在列出 C:\Windows 下的 .exe 文件...
dir /b C:\Windows\*.exe
) else (
echo 错误:C:\Windows 不存在!
)
pause
任务2:统计用户指定路径的 .jpg
文件
@echo off
set /p path=请输入要统计的路径:
set count=0
for /f %%a in ('dir /b "%path%\*.jpg" 2^>nul ^| find /c /v ""') do set count=%%a
echo 找到 %count% 个 .jpg 文件
pause
6. 下一步学习
- 第三课:文件操作(复制、删除、重命名)和函数封装。
- 第四课:高级技巧(注册表操作、网络命令)。
这一切,似未曾拥有