bat知识点3_for循环
来源:互联网 发布:kk棋牌源码 编辑:程序博客网 时间:2024/06/02 05:28
1.for的定义
在批处理文件中基本用法 :
for %%I in (command1) do command2
(1)for、in 和do 是 for 语句的关键字,它们三个缺一不可。
(2)%%I 是for 语句中对形式变量的引用,就算它在do 后的语句中没有参与语句的执行,也是必须出现的。
形式变量 I,可以换成 26 个字母中的任意一个,这些字母会区分大小写,也就是说,%%I 和%%i 会被认为
不是同一个变量;形式变量 I还可以换成其他的字符,但是,为了不与批处理中的%0~%9 这10 个形式变量
发生冲突,请不要随意把%%I 替换为%%0 ~%%9 中的任意一个。
(3)in 之后,do 之前的括号不能省略。
(4)command1 表示字符串或变量,command2 表示字符串、变量或命令语句。
(5)for 后 可以 加 /f /r /l /d 这四个 参数
/f 用于读取文件内容,以行为单位处理文本文件。
/r 检查以/r后面跟的 path 为根的目录树中,所有符合的文件或者文件夹。若没有指定目录,则使用当前目录。
/l 增量形式(即从1-254或254-1)
/d 用于搜索目录或文件夹,但不会搜索文件,也不搜索子目录。
2.切分字符串的利器:delims=
test.txt----------------
123,456
test.bat----------------
@echo off
for /f "delims=," %%i in (test.txt) do echo %%i
运行结果:
123
由上,每行第一个逗号之后的所有内容都不见了(如果有不存在逗号的行,则保留原样)。
如果没有指定"delims=符号列表"这个开关,那么,for /f 语句默认以空格键或跳格键作为分隔符号。
test1.txt----------------
1.2345,6
test1.bat----------------
@echo off
for /f "delims=.," %%i in (test1.txt) do echo %%i
运行结果:
2345
由上,第一个点号或第一个逗号之前的内容都被提取出来了。
test1.bat的执行过程是:
逐行读取 test1.txt 中的内容,以点号和逗号切分每一行的内容(不存在点号和逗号的行,
则不再切分,为了描述的方便,我们把被点号或逗号切分的一个一个的字符串片段,称之为节),
然后,for /f 会提取第一节的内容作为最终结果,显示在屏幕上。需要注意的是,在这里,所有行的
字符串被切分成了两个以上的节,但是,代码只会提取第一节字符串的内容,因为 for /f 语句默认
只提取第一节的符串。
3.定点提取:tokens=
tokens= 后面一般跟的是数字,如 tokens=2,也可以跟多个,但是每个数字之间用逗号分隔,
如 tokens=3,5,8,它们的含义分别是:提取第2 节字符串、提取第3、第5 和第8 节字符串。
注意,这里所说的“节”,是由 delims= 这一开关划分的,它的内容并不是一成不变的。
(1)
test2.txt----------------
12,345,6
test2.bat----------------
@echo off
for /f "delims=,tokens=3" %%i in (test2.txt) do echo %%i
运行结果:
6
由上,要提取的内容在以逗号切分的第3节上,即为6。
(2)
如果 tokens= 后面指定了多个数字,如果形式变量为%%i,那么,第一个
数字指代的内容用第一个形式变量%%i 来接收,第二个数字指代的内容用第二
个形式变量%%j 来接收,第三个数字指代的内容用第三个形式变量%%k 来接
收??第N 个数字指代的内容用第N 个形式变量来接收,其中,形式变量遵循
字母的排序,第 N 个形式变量具体是什么符号,由第一个形式变量来决定:如
果第一个形式变量是%%i,那么,第二个形式变量就是%%j;如果第一个形式
变量用的是%%x,那么,第二个形式变量就是%%y。
test3.txt----------------
12,345,6,78,9
test3.bat----------------
@echo off
for /f "delims=,tokens=2,5" %%i in (test3.txt) do echo %%i %%j
运行结果:
345 9
由上,要提取的内容在以逗号切分的第2和5节上,即为345 9。
如果要提取的内容是连续的多“节”的话,那么,连续的数字可以只写最小值和最大值,中间用短横连
接起来即可,比如
tokens=1,2,3,4,5 可以简写为 tokens=1-5 。
还可以把这个表达式写得更复杂一点:
tokens=1,2-5 ,tokens=1-3,4,5
(3)
test4.txt----------------
12,345,6
test4.bat----------------
@echo off
for /f "delims=, tokens=1,*" %%i in (test4.txt) do echo %%i %%j
运行结果:
12 345,6
由上,第一个逗号不见了,取代它的是一个空格符号,其余部分保持不变。
其中奥妙就在这个星号上面。
tokens=后面所接的星号具备这样的功能:字符串从左往右被切分成紧跟在*之前的数值所表示的节数之后,
字符串的其余部分保持不变,整体被*所表示的一个变量接收。
test4.txt的内容被切分,切分符号为逗号,当切分完第一节之后,切分动作不再继续下去,
因为 tokens=1,* 中,星号前面紧跟的是数字 1;第一节字符串被切分完之后,其余部分字符串
不做任何切分,整体作为第二节字符串,这样,test4.txt就被切分成了两节,分别被变量%%i 和
变量%%j 接收。
4.跳过无关内容:skip=n
for /f 允许你跳过这些无用的行,直接从第N+1 行开始处理,这个时候,就需要使用参数 skip=n,
其中,n 是一个正整数,表示要跳过的行数。
@echo off
for /f "skip=2" %%i in (test.txt) do echo %%i
这段代码将跳过头两行内容,从第3 行起显示test.txt 中的信息。
5.忽略以指定字符打头的行:eol=
(1)忽略以分号打头的那些行
@echo off
for /f "eol=;" %%i in (test.txt) do echo %%i
只能指定1个指定字符。
for /f 语句是默认忽略以分号打头的行内容的,正如它默认以空格键或跳格键作为字符串的切分字符一样。
6.for /f的变形语句
(1)读取文本文件中的内容
for /f %%i in (文件名) do (...)
例如:
for /f %%i in (test.txt) do echo %%i
(2)读取命令语句执行结果中的内容
for /f %%i in ('命令语句') do (...)
例如:
for /f %%i in ('dir /a-d /b *test*.txt') do echo %%i
(3)要处理的是一个字符串时
for /f %%i in ("字符串") do (...)
例如:
for /f "delims=. tokens=1-3" %%i in ("bbs.bathome.cn") do echo %%i-%%j-%%k
7.usebackq
是一个增强型参数,当使用了这个参数之后,原来的for语句中第一个括号内的写法要做如下变动:
如果第一个括号里的对象是一条命令语句的话,原来的单引号'要改为后引号`;
如果第一个括号里的对象是字符串的话,原来的双引号"要改为单引号';
如果第一个括号里的对象是文件名的话,要用双引号"括起来。
此字段主要用于解决文件路径中含有特殊字符的情况,比如文件名中含有空格或&。
@echo off
for /f "usebackq" %%i in ("test 1.txt") do echo %%i
注意:上面的文件名字中带有空格。
(1)for /f "usebackq" %%i in ("文件名") do (...)
(2)for /f "usebackq" %%i in (`命令语句`) do (...)
(3)for /f "usebackq" %%i in ('字符串') do (...)
0 0
- bat知识点3_for循环
- bat知识点3_for循环_跳出嵌套
- bat知识点3_for循环_指定变数
- 黑马程序员_for循环
- 13_for循环
- JACK_C#_for循环
- java基础_day0004_循环_for
- java基础_day0010_循环_for
- 黑马程序员_java入门_for循环实例
- 07黑马程序员_for循环,跳转语句
- 黑马程序员_for循环和函数
- 黑马程序员_for循环及增强for循环_java
- J2ME代码效率测试_for循环和除法
- asm source code note 1.3_for循环的实现
- 2015.4.25.13.53_for_2015.4.25_for循环总结
- Java基础学习应用_for循环打印99乘法表
- Java基础学习应用_for循环打印水仙花数
- bat知识点5_EnableDelayedExpansion
- Run.getRuntime.exec
- 【NOIP2016提高A组模拟8.19】树上路径
- linux和qt 字符串和数字转换篇
- 从头搭建Logstash+ElasticSearch+Kibana
- windows下redis 和 hiredis的编译与使用
- bat知识点3_for循环
- 用Clonezilla再生龙备份系统分区详细教程[图文]
- C++中模版的使用
- Controller
- windows api实现计算机空闲关机
- dialog上弹出toast
- 51Nod-1093-骆驼和香蕉
- java笔试+面试总结——设计模式篇
- POJ 2243:Knight Moves(双向BFS)