Skip to content

cmd 中 for...in...do 循环

以下是批处理脚本中 for...in...do 语法的详细解析,结合核心参数、执行逻辑及实际案例说明:


🔍 基础语法结构

batch
for %%变量 in (集合) do (执行命令)
  • %%变量
    循环变量,批处理文件中必须用双百分号(命令行直接执行时用单百分号 %),字母区分大小写(%%i%%I)。
  • (集合)
    待遍历的元素集,支持多种形式:
    • 字符串列表:("A" "B" "C")
    • 通配符匹配:(*.txt)
    • 命令输出:需配合 /f 参数(如 'dir /b')。
  • do (执行命令)
    对每个元素执行的操作,可包含多行命令(用括号包裹)。

🔄 执行流程

  1. (集合) 中按顺序取出一个元素,赋值给 %%变量
  2. 执行 do 后的命令,此时 %%变量 代表当前元素值。
  3. 重复上述步骤,直到所有元素处理完毕。

⚙️ 关键参数详解

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(按字母顺序)。

⚠️ 注意事项与技巧

  1. 元素分隔符
    集合中默认以 空格、逗号、分号或等号分隔元素。若元素含空格,需加双引号:

    batch
    for %%f in ("file 1.txt" "file 2.txt") do echo %%f
  2. 嵌套循环
    内层和外层循环变量名需不同(如外层 %%i,内层 %%j)。

  3. 变量作用域
    循环变量仅在当前 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 测试输出,再写入正式逻辑。