Bat批处理脚本for /F语句

for /F 扩展,功能强大,可以解析文本、切分字符串、定点提取、跳过无关内容、忽略以指定字符开头的行等等,主要用来处理文件和一些命令的输出结果。

1. for /F 基本用法

语法格式:

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]
rem 翻译一下就是:
for /f %%i in (文件名) do (……)
for /f %%i in ('命令语句') do (……)
for /f %%i in ("字符串") do (……)

file-set 为一个或多个文件名。
options 可选参数,包括一个或多个指定不同解析选项的关键字,这些关键字包括eol=c、skip=n、delims=xxx、tokens=x,y,m-n、usebackq,下面的高级选项里面将一一介绍。
先来看一个简单的实例:解析test.txt文本中的内容

@echo off
for /F %%i in (test.txt) do echo %%i
pause

for语句是依次处理每个元素,直到所有的元素都被处理为止。
在for /F语句中,元素是指文件中的每一行,也就是说for /F语句是以行为单位来处理文本文件的

2. for /F 的高级选项

for /F 可以通过设置“options”关键字来实现很多高级功能。

eol忽略指定开头的行

eol=c 忽略以指定字符开头的行,可以使用该功能跳过注释,1次只能制定1个字符。

实例:通过eol=#,忽略以#开头的行。

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

可以看到test.txt文件中以#开头第二行被过滤掉了。

skip跳过行

skip=n 指在文件开始时忽略的行数,即从文件第一行开始跳过n行,从n+1行开始显示,n是一个正整数,表示要跳过的行数。

实例:跳过前2行,从第3行显示test.txt中的信息。

@echo off
for /f "skip=2" %%i in (test.txt) do echo %%i
pause

delims分隔符集

delims=xxx 指分隔符集。

单个分隔符

这个替换了空格和制表符的默认分隔符集,意思就是可以指定多个符号进行文本分隔。

实例:通过"delims=:"将test.txt的内容进行分隔

@echo off
for /F "delims=:" %%i in (test.txt) do (
    echo %%i
)
pause

多个分隔符

delims还可以同时指定多个分隔符,当多个分隔符中有空格的时候,需要把空格放在最后面
实例:通过"delims=:. "分隔test.txt的内容。

@echo off
for /F "delims=:.| " %%i in (test.txt) do (
    echo %%i
)
pause

可以看到:.|和空格之后的内容全部都过滤掉了。

tokens定点提取

tokens=x,y,m-n 定点提取,tokens=后面可以是一个数字或者多个数字,多个数字用英文逗号隔开,来提取通过delims分隔的列内容;

tokens=x 表示提取第x列;
tokens=x,y 表示提取第x列和第y列;
tokens=m-n 表示提取第m列到第n列;
tokens=x,y,m-n 表示提取第x列,第y列,第m列到第n列。
tokens=x* 表示提取x列后的所有字符,星号表示剩余的字符;
实例:通过“delims=|”分隔test.txt,提取分隔后的第2列;

@echo off
for /F "delims=| tokens=2" %%i in (test.txt) do (
    echo %%i
)
pause

“delims=|”将test.txt文本的第二行内容分隔成了8段,可以理解成8列,然后通过tokens=2提取其中的第2列。

"tokens="后面指定多个数字的时候,每一个数字截取的内容都需要一个变量来接收,比如“tokens=1,3,5”就需要3个变量接收,假如第一个变量为%%i,第二个就是%%j,第三个为%%k,变量遵循字母排序,也就是说第一个变量为a%的话,第二个必须为b%,不能是其他字母。

实例:通过“delims=|”分隔test.txt,提取分隔后的第2列,第3列,第6到8列;

@echo off
for /F "delims=| tokens=2,3,6-8" %%i in (test.txt) do (
    echo %%i__%%j__%%k__%%l__%%m
)
pause

实例:通过“tokens=3*”提取test.txt中第二行的第3列及后面的所有列

@echo off
for /F "delims=| tokens=3*" %%i in (test.txt) do (
    echo %%i******%%j
)
pause

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值