/F 扩展是 for 语句最常用的、也是最强的命令。主要用来处理文件和一些命令的输出结果。它可以提取文本文件的内容,进行逐行分析和处理。语法:
1 2 3 |
|
或者,如果有 usebackq 选项:
1 2 3 |
|
其中,file-set 为一个或多个文件名。for 语句会逐一分析指定的每个文件,打开指定文件、读取并处理文件内容。处理包括读取文件内容,将文件内容逐行读取,然后将每行解析成零或更多的符号(默认使用空格作为分隔符)。
实例:下面是一个简单的 for /F 语句,该实例将逐行读取 test.txt 文件的内容,然后默认使用空格分隔。然后将分隔后的列赋值给 %%i(这里只是将第一列赋值给%%i)。test.txt 文本文件内容如下:
1 2 3 |
|
批处理脚本内容如下:
1 2 3 4 5 |
|
输出结果:
1 2 3 4 5 |
|
for /F 高级选项
for /F 还有很多高级功能,这些功能需要通过设置 "options" 来实现,下面将进行逐一介绍。
eol=c
忽略以指定字符开头的行。可以使用该功能跳过注释。
实例:实例通过 “eol=#”指定以“#”开头的行为注释行,忽略这些行,不进行处理。
1 2 3 4 |
|
批处理脚本代码:
1 2 3 4 5 |
|
输出结果:
1 2 3 4 5 |
|
skip=n
指定在 for 语句解析每个文件时,从文件头部跳过的行数。
实例:使用 skip=2 跳过指定文件的第一行和第二行。
1 2 3 4 |
|
批处理脚本:
1 2 3 4 5 |
|
输出结果:
1 2 3 4 |
|
delims=xxx
指定分隔符号集,替换 for 语句默认的空格和制表符分隔符号。
实例:使用“delims=#”定义使用井号符分割内容。
1 2 3 |
|
批处理脚本:
1 2 3 4 5 |
|
输出结果:
1 2 3 4 5 |
|
实例:可以使用“delims”可以指定多个分隔符,如:“delims=#|,”
1 2 3 |
|
批处理脚本:
1 2 3 4 5 |
|
输出结果:
1 2 3 4 5 |
|
delims 允许指定多个分隔符,如果指定多个分割符号时,你要指定空格,请将空格放置到最后,不要放置到最前面。实例如下:
1 2 3 4 |
|
批处理脚本:
1 2 3 4 5 6 7 8 9 10 |
|
输出结果:
1 2 3 |
|
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 |
|
(1)使用 tokens=3 提取第三列的数据,对应上面的文本文件为“成绩”列。
1 2 3 4 5 |
|
输出结果:
1 2 3 4 5 6 |
|
(2)使用 tokens=1,3 提取第1列和第3列到变量 %%i 和 %%j。代码如下:
1 2 3 4 5 |
|
输出结果:
1 2 3 4 5 6 |
|
(3)使用 tokens=2-3 提取第2列和第3列,并且将提取的值放入 %%a 和 %%b(如果你指定的是 %%a,则 for 将递增的将第二列放入 %%b、第三列放入 %%c……一直递增到z或Z)。
1 2 3 4 5 |
|
输出结果:
1 2 3 4 5 6 |
|
(4)使用 tokens=2* 提取第二列即后面的所有列,并且将提取的值放入 %%a 和 %%b。
1 2 3 4 5 |
|
输出结果:
1 2 3 4 5 6 |
|
(5)使用 tokens=* 忽略行首的所有空格。
1 2 3 4 |
|
批处理脚本:
1 2 3 4 5 |
|
输出结果:
1 2 3 4 5 6 |
|