FOR /F 基础

/F 扩展是 for 语句最常用的、也是最强的命令。主要用来处理文件和一些命令的输出结果。它可以提取文本文件的内容,进行逐行分析和处理。语法:

1

2

3

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]

FOR /F ["options"] %variable IN ("string") DO command [command-parameters]

FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

或者,如果有 usebackq 选项:

1

2

3

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]

FOR /F ["options"] %variable IN ("string") DO command [command-parameters]

FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

其中,file-set 为一个或多个文件名。for 语句会逐一分析指定的每个文件,打开指定文件、读取并处理文件内容。处理包括读取文件内容,将文件内容逐行读取,然后将每行解析成零或更多的符号(默认使用空格作为分隔符)。

实例:下面是一个简单的 for /F 语句,该实例将逐行读取 test.txt 文件的内容,然后默认使用空格分隔。然后将分隔后的列赋值给 %%i(这里只是将第一列赋值给%%i)。test.txt 文本文件内容如下:

1

2

3

姓名  年龄   成绩

张三   28     87

李四   32     92

批处理脚本内容如下:

1

2

3

4

5

@echo off

for /F %%i in (test.txt) do (

    echo %%i

)

pause

输出结果:

1

2

3

4

5

C:\Users\Administrator\Desktop\bat> test.bat

姓名

张三

李四

请按任意键继续. . .

for /F 高级选项

for /F 还有很多高级功能,这些功能需要通过设置 "options" 来实现,下面将进行逐一介绍。

eol=c

忽略以指定字符开头的行。可以使用该功能跳过注释。

实例:实例通过 “eol=#”指定以“#”开头的行为注释行,忽略这些行,不进行处理。

1

2

3

4

# 用户信息

姓名  年龄   成绩

张三   28     87

李四   32     92

批处理脚本代码:

1

2

3

4

5

@echo off

for /F "eol=#" %%i in (test.txt) do (

    echo %%i

)

pause

输出结果:

1

2

3

4

5

C:\Users\Administrator\Desktop\bat> test.bat

姓名

张三

李四

请按任意键继续. . .

skip=n

指定在 for 语句解析每个文件时,从文件头部跳过的行数。

实例:使用 skip=2 跳过指定文件的第一行和第二行。

1

2

3

4

# 用户信息

姓名  年龄   成绩

张三   28     87

李四   32     92

批处理脚本:

1

2

3

4

5

@echo off

for /F "skip=2" %%i in (test.txt) do (

    echo %%i

)

pause

输出结果:

1

2

3

4

C:\Users\Administrator\Desktop\bat> test.bat

张三

李四

请按任意键继续. . .

delims=xxx

指定分隔符号集,替换 for 语句默认的空格和制表符分隔符号。

实例:使用“delims=#”定义使用井号符分割内容。

1

2

3

姓名#年龄#成绩

张三#28#87

李四#32#92

批处理脚本:

1

2

3

4

5

@echo off

for /F "delims=#" %%i in (test.txt) do (

    echo %%i

)

pause

输出结果:

1

2

3

4

5

C:\Users\Administrator\Desktop\bat> test.bat

姓名

张三

李四

请按任意键继续. . .

实例:可以使用“delims”可以指定多个分隔符,如:“delims=#|,”

1

2

3

姓名#年龄#成绩

张三|28|87

李四,32,92

批处理脚本:

1

2

3

4

5

@echo off

for /F "delims=#|," %%i in (test.txt) do (

    echo %%i

)

pause

输出结果:

1

2

3

4

5

C:\Users\Administrator\Desktop\bat> test.bat

姓名

张三

李四

请按任意键继续. . .

delims 允许指定多个分隔符,如果指定多个分割符号时,你要指定空格,请将空格放置到最后,不要放置到最前面。实例如下:

1

2

3

4

姓名#年龄#成绩

张三|28|87

李四,32,92

赵六 30 78

批处理脚本:

1

2

3

4

5

6

7

8

9

10

@echo off

REM 错误的方式,如果指定多个分隔符时,不要将空格放置到前面

for /F "delims= #|," %%i in (test.txt) do (

    echo %%i

)

REM 正确的方式,将空格放置到 delims 最后

for /F "delims=#|, " %%i in (test.txt) do (

    echo %%i

)

pause

输出结果:

1

2

3

C:\Users\Administrator\Desktop\bat> test.bat

此时不应有 #|,"。   

请按任意键继续. . .

tokens=x,y,m-n

简单的来说就是配置怎样去提取每一行的列,列的数量是根据你配置的 delims 决定了,因为 for 语句将使用 delims 对行进行分割。tokens 语法格式:

  • tokens=m 表示提取第m列;

  • tokens=m,n 表示提取第m列和第n列;

  • tokens=m-n 表示提取第m列至第n列;

  • tokens=* 忽略行首的所有空格;

  • tokens=m* 提取第m列以后的所有字符,星号表示剩余的字符;

注意:输出变量的个数由定义了的tokens决定。在 FOR 语句中显式声明 %%i。使用 tokens= 隐式声明 %%j 和 %%k。只要不会引起试图声明高于字母“z”或“Z”的某个变量,则使用 tokens= 可以指定最多 26 个输出变量。 

我们通过实例来演示怎样去使用 tokens ,要解析的文本文件内容如下:

1

2

3

4

姓名|年龄|成绩

张三|28|87

李四|32|92

赵六|30|78

(1)使用 tokens=3 提取第三列的数据,对应上面的文本文件为“成绩”列。

1

2

3

4

5

@echo off

for /F "delims=| tokens=3" %%i in (test.txt) do (

    echo %%i

)

pause

输出结果:

1

2

3

4

5

6

C:\Users\Administrator\Desktop\bat> test.bat

成绩

87

92

78

请按任意键继续. . .

(2)使用 tokens=1,3 提取第1列和第3列到变量 %%i 和 %%j。代码如下:

1

2

3

4

5

@echo off

for /F "delims=| tokens=1,3" %%i in (test.txt) do (

    echo %%i ---- %%j

)

pause

输出结果:

1

2

3

4

5

6

C:\Users\Administrator\Desktop\bat> test.bat

姓名 ---- 成绩

张三 ---- 87  

李四 ---- 92  

赵六 ---- 78  

请按任意键继续. . .

(3)使用 tokens=2-3 提取第2列和第3列,并且将提取的值放入 %%a 和 %%b(如果你指定的是 %%a,则 for 将递增的将第二列放入 %%b、第三列放入 %%c……一直递增到z或Z)。

1

2

3

4

5

@echo off

for /F "delims=| tokens=2-3" %%a in (test.txt) do (

    echo %%a ---- %%b

)

pause

输出结果:

1

2

3

4

5

6

C:\Users\Administrator\Desktop\bat> test.bat

年龄 ---- 成绩      

28 ---- 87

32 ---- 92

30 ---- 78

请按任意键继续. . .

(4)使用 tokens=2* 提取第二列即后面的所有列,并且将提取的值放入 %%a 和 %%b。

1

2

3

4

5

@echo off

for /F "delims=| tokens=2*" %%a in (test.txt) do (

    echo %%a ---- %%b

)

pause

输出结果:

1

2

3

4

5

6

C:\Users\Administrator\Desktop\bat> test.bat

年龄 ---- 成绩      

28 ---- 87

32 ---- 92

30 ---- 78

请按任意键继续. . .

(5)使用 tokens=* 忽略行首的所有空格。

1

2

3

4

姓名|年龄|成绩

张三|28|87

李四|32|92

赵六|30|78

批处理脚本:

1

2

3

4

5

@echo off

for /F "delims=| tokens=*" %%a in (test.txt) do (

    echo %%a

)

pause

输出结果:

1

2

3

4

5

6

C:\Users\Administrator\Desktop\bat> test.bat

姓名|年龄|成绩      

张三|28|87

李四|32|92

赵六|30|78

请按任意键继续. . .

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值