批处理Bat简单教程

阅读前注意@REM是Bat的注解

@REM for /f "delims= " %%i in (d:\out.txt) do echo %%i
@REM pause
@REM echo on

@REM 输出所有的Log
@REM echo on

@REM 输出指定的Log
@REM echo off
@REM echo 指定的

@REM 输入并提示,将输入值作为变量
@REM set /p var=请输入:
@REM echo %var%

@REM 输入并计算,将计算后的值作为变量
@REM set /a var=1+2
@REM echo %var%

@REM 打印变量(记得前后加百分比)
set var=xx
echo %var%

@REM 获取命令执行的结果
@REM for /f “tokens=*” %%i in (‘adb version’) do echo %%i
@REM pause
@REM 下面的内容是for /f的教程
@REM 1.FOR /F %%i IN (file) DO command
@REM file为文件名,按照官方的说法是,for会依次将file中的文件打开,并且在进行到下一个文件之前将每个文件读取到内存,按照每一行为一个元素,忽略空白的行。
@REM 假如文件d:\out.txt中有如下内容:

@REM 第1行第1列第1行第2列第1行第3列
@REM 第2行第1列第2行第2列第2行第3列
@REM 第3行第1列第3行第2列第3行第3列

@REM 怎么遍历文件中的内容呢?下面的语句可以:
@REM for /f %%i in (d:\out.txt) do echo %%i

@REM 执行过程:for会先打开out.txt,然后读出out.txt里面的所有内容,把它作为一个集合,并且以每一行(文件中无分隔符情况下)作为一个元素,用%%i依次代替每个元素,然后执行do后面的命令。

@REM for /f会默认以每一行(无分隔符)来作为一个元素,但是有分隔符怎么办?假如out.txt内容变成如下:

@REM 第1行第1列 第1行第2列 第1行第3列
@REM 第2行第1列 第2行第2列 第2行第3列
@REM 第3行第1列 第3行第2列 第3行第3列

@REM 那么for /f %%i in (d:\out.txt) do echo %%i就无法将所有的内容显示出来。显示结果如下:

@REM 第1行第1列
@REM 第2行第1列
@REM 第3行第1列

@REM 因为命令默认是以空格和TAB为分隔符,所以它遇到分割符之后,默认只取第一个,就将分割符后面的都丢掉了。

@REM 如果我们还想把每一行再分解更小的内容,该怎么办呢?for命令提供了更多的参数,它们就是:delims和tokens
@REM delims :告诉for每一行应该拿什么作为分隔符,默认的分隔符是空格和tab键
@REM 比如,我们执行下面的命令:

@REM for /f "delims= " %%i in (d:\out.txt) do echo %%i

@REM 显示的结果:

@REM 第1行第1列
@REM 第2行第1列
@REM 第3行第1列

@REM 这个命令和for /f %%i in (d:\out.txt) do echo %%i的效果是一样的。

@REM 如果我们想要每一行的后面的元素,那又如何呢?这个时候就可以利用tokens参数,它的作用就是当你通过delims将每一行分为更小的元素时,由tokens来控制要取哪一个或哪几个。
@REM 还是上面的例子,执行如下命令:

@REM for /f "tokens=2 delims= " %%i in (d:\out.txt) do echo %%i

@REM 执行结果:

@REM 第1行第2列
@REM 第2行第2列
@REM 第3行第2列
@REM 如果要显示第二列和第三列,则换成tokens=2,3或tokens=2-3,全部显示则使用通配符tokens=*。

@REM 注意:如果显示多个元素(非*),比如这里的tokens=2-3,语句应该写成这样:

@REM for /f "tokens=2,3 delims= " %%i in (d:\out.txt) do echo %%i %%j

@REM 怎么多出一个%%j?
@REM 这是因为你的tokens后面要取每一行的两列,用%%i来替换第二列,用%%j来替换第三列。
@REM 并且必须是按照英文字母顺序排列的,%%j不能换成%%k,因为i后面是j。
@REM 执行结果为:

@REM 第1行第2列 第1行第3列
@REM 第2行第2列 第2行第3列
@REM 第3行第2列 第3行第3列

@REM 又如下面语句:

@REM for /f "tokens=2,* delims= " %%i in (d:\out.txt) do echo %%i %%j
@REM 它显示从第二列到最后的一列,执行结果为:

@REM 第1行第2列 第1行第3列
@REM 第2行第2列 第2行第3列
@REM 第3行第2列 第3行第3列

@REM 用%%i代替第二列,用%%j代替剩余的所有。

@REM 最后还有skip,eol和usebackq。

@REM skip就是要忽略文件的前多少行,eol用来指定当一行以什么符号开始时,就忽略它。比如:

@REM for /f “skip=2 tokens=*” %%i in (d:\out.txt) do echo %%i
@REM 结果为:

@REM 第3行第1列 第3行第2列 第3行第3列
@REM 用skip来告诉for跳过前两行。

@REM 再如,当out.txt内容变成:

@REM #第1行第1列 第1行第2列 第1行第3列
@REM #第2行第1列 第2行第2列 第2行第3列
@REM 第3行第1列 第3行第2列 第3行第3列

@REM for /f “eol=# tokens=*” %%i in (d:\out.txt) do echo %%i

@REM 结果是:

@REM 第3行第1列 第3行第2列 第3行第3列
@REM 用eol来告诉for忽略以“.”开头的行。

@REM usebackq就是反转的意思,他把字符串(“out.txt”)当做文件,或者把命令(‘command’)当做字符串。

@REM 例如:

@REM for /f “usebackq eol=# tokens=*” %%i in (“d:\out.txt”) do echo %%i

@REM 结果是:

@REM 第3行第1列 第3行第2列 第3行第3列

@REM 如果不加usebackq,则"d:\out.txt"会被当成字符串。

@REM 又例如:

@REM for /f “usebackq tokens=*” %%i in (‘echo helloworld!’) do echo %%i

@REM 结果:

@REM echo helloworld,这里命令被当成了字符串。

@REM 如果没有usebackq

@REM for /f “tokens=*” %%i in (‘echo helloworld!’) do echo %%i

@REM 结果:

@REM helloworld!

@REM 2.FOR /F [“options”] %%i IN (“string”) DO command

@REM 例子:

@REM for /f "tokens=2,* delims= " %%i in (“this is an example!”) do echo %%i %%j

@REM 结果:

@REM is an example!

@REM 对于字符串的处理类似于文件的处理,此处不再赘述。

@REM 3.FOR /F [“options”] %%i IN (‘command’) DO command

@REM 该命令将command的执行结果作为集合,后面的处理类似文件处理,此处不再赘述。

pause

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值