DOS快餐店
终极DOS技能——循环(上)
★★★★
■掌柜的
√学会在批处理中使用循环
√利用循环完成批量任务
《DOS快餐店》的连载即将走向尾声,掌柜的为大家带来的最后大餐是循环语句,这是批处理的精华部分。学会循环语句后,你会发现原来不必学习VB等编程语言就能实现各种复杂的功能。
注意:文中的变量都是以“%%变量名”形式给出的,适合在批处理文件中使用,如果是直接在命令提示符下执行命令,则应改为“%变量名”。
基础篇:从搬啤酒想到的
1.从店小二搬啤酒开始:什么是循环
掌柜的让店小二去仓库搬5箱啤酒来,凭店小二的力气最多一下子只能搬起1箱,这可怎么办?这种问题即使是小学生也能回答:“来回搬5次呗!”可是在批处理中,如果你有一大堆文件要处理,应该如何设定“来回搬”呢?循环就扮演了这个来回跑腿的角色,至于搬什么、怎么搬、搬多少次,则都是由我们决定的。
2.怎么反复地搬啤酒:轻松用循环
循环语句和以往其他DOS语句一样,有简单的应用也有复杂的应用,那我们就先从简单的开始吧。
for判断指定的条件是否符合,如果符合则来回执行指定的语句,直到条件不符合为止,以显示当前目录下所有BAT和TXT文件的内容为例:
for %%f in (*.bat *.txt) do type %%f
这条语句是指,在当前目录下搜索所有BAT和TXT文件,并逐个将搜索到的文件名存入变量%%f中,每搜索到一个,就执行type命令显示%%f变量中指定的文件。
如果你还是不太明白,没关系,用刚才店小二搬箱子的实例来解释这个循环。
for %%当前搬的箱子 in (仓库里的5箱啤酒) do 搬运%%当前搬的箱子
这个循环开始执行后,就从第1箱啤酒开始,循环每执行一次就把当前找到的啤酒箱搬走,直到将第5箱啤酒也搬走后,循环结束。
3.啤酒有几种搬法:循环能玩什么花样
(1)有始有终的数字序列
命令格式:for /L %%变量 in (开始,步进,结束) do 循环执行指定的命令 [命令参数]
参数/L用来将循环指定在一个数字集合内,指定了起始数,每次循环递增/减的数字,以及当数字超出什么范围时循环结束。
for /L %%c in (3,1,5) do echo %%c
这条语句是指循环开始时首先将3这个数字存入变量%%c中,并用echo语句显示出来,然后循环每执行一次,这个存入的数字就加1(即在命令格式中的“步进”值),直到数字超出5,循环结束。这段语句的结果是依次显示3、4、5。
小提示
步进值可以是正的,也可以负的。比如(1,1,5)产生的数字序列是“1 2 3 4 5”,而(5,-1,1)将产生数字序列“5 4 3 2 1”。

(2)一大堆文件
命令格式:for %%变量 in (文件集合) do 循环执行指定的命令 [命令参数]
其中“文件集合”可以是一个目录的名称,也可以是使用通配符的文件名,另外,还可以使用形如“a.txt b.txt c.txt”的文件集。

中级篇:更多的参数应用
1.玩转目录遍历
使用“for %%c in (*.txt) do type %%c”命令可以遍历当前目录下的所有TXT文件,并把文件名显示出来。如果需要遍历的是目录而不是文件,那么可以在“for”之后加上参数/d,这是“directory”(目录)的缩写。比较一下上面的遍历文件语句与“for /d %%c in (*.*) do echo %%c”各自的执行结果,看看有什么不同。
2.子目录也不能放过
如果用默认方式遍历文件/目录,那么for只会处理指定路径下的目录或文件,而对这些找到的目录中是否还有子目录就不关心了。可以使用参数/r来让for支持子目录搜索,这是“recurse subfolders”(递归查询子目录)的缩写。
①子目录下的文件遍历:for /r %%变量名 in

应用篇:拿起循环武器
目录中有一大堆记录联系人信息的TXT文件,想把它们都合并到一个文件中,用循环武器来试试吧。
实例:将当前目录中所有的TXT文件合并到all.txt中。
@echo off
type NUL > all.txt
for %%f in (*.txt) do copy /b all.txt+%%f all.txt
脚本解释:首先关闭命令回显,然后新建一个all.txt的文件(type NUL就是不显示任何信息,而将其输出到新文件中,就是指新建一个空文件)。

DIY你的DOS菜
上期答案:
1.断开用户Cornel在本地的连接会话。
net session \\Cornel /delete
2.添加192.168.0.3与00-58-23-DA-01-CB关联的ARP记录。
arp -a 192.168.0.3 00-58-23-DA-01-CB
本期习题:
1.将1到100的数字按顺序逐个写入num.txt中,每个数字占一行。
2.将当前目录下的所有文件都加上“dos”前缀,比如1.jpg改名为dos1.jpg。

 

转自cfan,感谢PK分享经验

评论被关闭。