
如果您需要在Windows批处理脚本中读取文本文件的每一行内容,则可以使用for /f命令实现逐行解析。以下是多种可行的方法:
一、基础语法:使用 for /f 读取文件全部行
该方法适用于无特殊分隔符、无空行、无首尾空格干扰的标准文本文件,通过默认分隔符(空格、制表符)和令牌(第一列)提取每行原始内容。
1、新建一个批处理文件(例如read.bat),用记事本打开并输入以下内容:
2、@echo off
3、for /f "delims=" %%i in (test.txt) do echo %%i
4、保存后,确保同目录下存在名为test.txt的文本文件
5、双击运行批处理文件,即可逐行输出test.txt中的内容
注意:必须使用”delims=”参数关闭默认分隔符,否则每行将被截断为第一个单词
二、处理含空格或路径含空格的文件
当目标文件名或路径中包含空格时,直接引用会导致for /f误判为多个参数,需用引号包裹并配合usebackq启用反引号扩展模式。
1、将原命令修改为:for /f "usebackq delims=" %%i in ("C:\My Files\input.txt") do echo %%i
2、其中usebackq允许在双引号内指定文件路径
3、"delims="仍需保留以防止行内空格触发分割
注意:路径必须用英文双引号包围,且不能省略usebackq参数,否则报错“系统找不到文件”
三、跳过开头若干行并读取剩余内容
某些日志或导出文件前几行为标题或说明,实际数据从指定行开始,可通过skip参数跳过前置行。
1、例如跳过前两行:for /f "skip=2 usebackq delims=" %%i in ("data.log") do echo %%i
2、skip=2表示忽略前2行,从第3行起开始循环
3、若需同时跳过并限制读取行数,可额外添加maxlen参数(但for /f本身不支持maxlen,需配合其他逻辑)
注意:skip值必须为非负整数,且不能超过文件总行数,否则循环体不会执行
四、按指定分隔符提取特定字段
当文本为CSV、TSV等结构化格式时,可利用delims定义分隔符,并用tokens选取所需列。
1、对于逗号分隔的user.csv(内容如:Alice,25,Engineer):
2、执行:for /f "delims=, tokens=1,3" %%a in (user.csv) do echo Name:%%a Title:%%b
3、delims=,设定逗号为分隔符
4、tokens=1,3表示提取第1列与第3列,分别赋给%%a和%%b
注意:tokens索引从1开始,变量字母需按顺序连续分配(%%a、%%b、%%c…),不可跳用
五、读取时保留空行与首尾空格
默认情况下for /f会跳过空行,且自动截去每行首尾空格。若需完整保留原始格式,须改用set /p配合重定向逐行读取。
1、编写如下代码段:
2、@echo off
3、setlocal enabledelayedexpansion
4、for /f "delims=" %%i in (‘type test.txt ^| findstr /n "^"’) do (
5、set "line=%%i"
6、set "line=!line:*:=!"
7、echo(!line!
8、)
注意:此方案通过findstr /n为每行编号再剥离编号,可有效保留空行及首尾空格,但性能低于原生for/f

评论(0)