for 循环基础
for 用于遍历集合执行命令,是 CMD 里最灵活也最容易踩坑的语法。它有四种常用形态:默认遍历文件集合、加上 /d 遍历目录、加上 /r 递归目录树、加上 /l 遍历数字序列、加上 /f 解析文本或命令输出。命令行与批处理里的百分号写法不同,这是最高频的错误来源。
基本信息
| 适用平台 | Windows CMD(cmd.exe) |
|---|---|
| 语法 | for %i in (集合) do 命令 |
| 形态开关 | /d 遍历目录、/r 递归、/l 数字序列、/f 解析文本或命令输出 |
| 百分号规则 | 命令行写 %i,批处理文件里必须写 %%i |
| /f 选项 | tokens 指定列、delims 指定分隔符、skip 跳过行、usebackq 支持反引号 |
| 默认行为 | /f 默认按空格与制表符分词,并跳过空行 |
典型使用场景
- 批量处理同类型文件,例如逐个压缩、改名或复制
- 遍历目录树查找或统计文件
- 生成连续数字序列做计数循环
- 解析 CSV 或命令输出,提取需要的列
- 在循环内累加计数,用于统计与判断
常用示例
常用示例
REM 命令行逐项输出
for %i in (a b c) do echo %i
REM 数字序列:起始,步长,结束
for /L %i in (1,1,5) do echo 第 %i 次
REM 遍历当前目录下的日志文件
for %f in (*.log) do echo 处理 %f
REM 递归遍历目录树,结果含完整路径
for /r D:\src %f in (*.txt) do echo %f
REM 解析 CSV 前两列,批处理里要写 %%a 与 %%b
for /f "tokens=1,2 delims=," %a in (data.csv) do echo %a - %b
REM 解析命令输出需要 usebackq
for /f "usebackq tokens=*" %i in (`ipconfig ^| findstr IPv4`) do echo %i形态与用途
| 写法 | 用途 | 注意 |
|---|---|---|
| for %i in (集合) | 遍历文件集合 | 支持通配符 |
| for /d | 遍历目录而非文件 | 只取目录名 |
| for /r | 递归遍历目录树 | 结果包含完整路径 |
| for /l | 生成数字序列 | 格式为起始 步长 结束 |
| for /f | 解析文本或命令输出 | 需按需指定 tokens 与 delims |
命令行里写 %i,写进批处理文件时必须改成 %%i。把命令行示例直接粘进 bat 文件,是最常见的失败原因。
for /f 默认以空格与制表符分词并跳过空行。处理逗号分隔的文本要显式设置 delims,否则取到的列会错位。