cmd 中 for...in...do 循环
以下是批处理脚本中 for...in...do
语法的详细解析,结合核心参数、执行逻辑及实际案例说明:
🔍 基础语法结构
batch
for %%变量 in (集合) do (执行命令)
%%变量
循环变量,批处理文件中必须用双百分号(命令行直接执行时用单百分号%
),字母区分大小写(%%i
≠%%I
)。(集合)
待遍历的元素集,支持多种形式:- 字符串列表:
("A" "B" "C")
- 通配符匹配:
(*.txt)
- 命令输出:需配合
/f
参数(如'dir /b'
)。
- 字符串列表:
do (执行命令)
对每个元素执行的操作,可包含多行命令(用括号包裹)。
🔄 执行流程
- 从
(集合)
中按顺序取出一个元素,赋值给%%变量
。 - 执行
do
后的命令,此时%%变量
代表当前元素值。 - 重复上述步骤,直到所有元素处理完毕。
⚙️ 关键参数详解
1️⃣ /d
:仅遍历目录
batch
for /d %%d in (temp*) do echo %%d
- 匹配当前目录下以
temp
开头的文件夹名(不处理文件)。
2️⃣ /r
:递归遍历子目录
batch
for /r C:\Docs %%f in (*.pdf) do echo %%f
- 递归搜索
C:\Docs
及其子目录下的所有 PDF 文件。
3️⃣ /l
:遍历数字序列
batch
for /l %%n in (1, 2, 10) do echo %%n
- 输出:
1 3 5 7 9
(起始值=1,步长=2,结束值=10)。
4️⃣ /f
:解析文本或命令输出
batch
for /f "tokens=1,3 delims=," %%a in (data.csv) do (
echo 字段1:%%a, 字段3:%%c
)
delims=,
:以逗号分割每行内容。tokens=1,3
:提取第1列和第3列,分别赋给%%a
和%%c
(按字母顺序)。
⚠️ 注意事项与技巧
元素分隔符
集合中默认以 空格、逗号、分号或等号分隔元素。若元素含空格,需加双引号:batchfor %%f in ("file 1.txt" "file 2.txt") do echo %%f
嵌套循环
内层和外层循环变量名需不同(如外层%%i
,内层%%j
)。变量作用域
循环变量仅在当前for
块内有效,退出后不可用。
💡 经典应用场景
批量重命名文件
batch
for %%f in (*.jpg) do ren "%%f" "2024_%%f"
- 为所有 JPG 文件添加前缀
2024_
。
关闭多个指定进程
batch
for %%p in (notepad.exe chrome.exe) do taskkill /f /im %%p
- 强制关闭记事本和 Chrome 进程。
提取日志关键词
batch
for /f "tokens=2 delims=:" %%l in ('findstr "ERROR" log.txt') do (
echo 错误详情: %%l
)
- 从
log.txt
中提取所有ERROR
后的描述信息。
📊 参数功能对比表
参数 | 作用 | 示例场景 | 执行效率 |
---|---|---|---|
无参数 | 遍历文件/字符串列表 | 批量重命名文件 | ⭐⭐⭐⭐ |
/d | 仅匹配目录 | 清理临时文件夹 | ⭐⭐⭐ |
/r | 递归子目录 | 全盘搜索特定文件 | ⭐⭐ |
/l | 生成数字序列 | 创建连续编号的文件夹 | ⭐⭐⭐⭐ |
/f | 解析文本/命令输出 | 分析 CSV 数据或日志文件 | ⭐⭐⭐ |
提示:
- 避免在循环内修改遍历中的文件(如删除当前处理的文件),可能导致意外行为。
- 复杂文本解析时,先用
echo
测试输出,再写入正式逻辑。