DOS快餐店
终极技能——循环(下)
★★★★
■掌柜的
√学会在批处理中使用循环
√利用循环完成批量任务
√循环的高级使用技巧
店小二的绝招:用循环打广告
这是DOS快餐店最后一次营业,掌柜的代表本店全体员工感谢大家一直以来的支持(店小二:“不就俩人吗……”掌柜的:“你快给我出来行礼!”)。
店小二听掌柜的说快餐店要关门大吉了,就开始提前懈怠了,从网上下载了一大堆免费的网络小说偷偷看了起来,当然结果又是一样的……三分钟后,掌柜的准时出现在店小二背后,铁青的脸强挤出一丝久违的职业微笑,对店小二说:“虽然DOS快餐店告一段落了,但最近我们大家都在筹备新的VBScript快餐店,你却在这儿闲着,就不能为新店开张做点宣传吗?”豆大的汗珠从店小二的额头上滚下来,幸好使用的是防水键盘,不然……
店小二的头上突然冒出一个电灯泡,何不把自己这些天来整理的一大堆免费小说都放到快餐店的网站上?掌柜的马上说:“很好,可是你这一大堆的文本文件,能不能在每个文件的最后加上一行宣传语呢?”
面对这上百个文本文件,店小二一下子傻了眼,后悔不该提这事,但是想到背后掌柜的脸色,就只好决定拿上次学到的终级技能“循环”来试试运气了。
@echo off
for %%f in (*.txt) do (
echo. >> %%f
echo DOS快餐店收集整理 >> %%f
)
这个脚本用于在当前目录中遍历所有TXT文件,并用重定向语句将广告信息写入文件最后。简单的循环有时可以帮我们很多忙,当满足循环条件时,批处理就执行do后的语句,但如果每次循环时想同时执行多条语句,则可通过在多条语句外侧加括号的方法来实现。另外,“echo. >> %%f”是要向%%f代表的文件最后写入一个回车,以便于小说正文与广告语句之间的区分。但需要注意的是,“echo”与“.”之间不能存有空格。

让循环更强大的催化剂:元素提取
店小二不知从哪儿弄到一大批顾客资料,但资料实在是有点详细的“惊人”,格式如下:
姓名 年龄 单位 性别 电话 个人简介
张三 20 CFan 男 13800000000 我叫张三……
李四 30 Digi 女 13900000000 我叫李四……
在这个顾客资料的文本里,有成千上万条这样的记录。而掌柜的看到这份顾客资料之后,也颇称赞了店小二一番。正当店小二开始飘飘然的时候,掌柜的却又突然严肃起来:“资料确实很详细,但是似乎太详细了,我只需要保留‘姓名’和‘电话’这两列,你快处理一下,下午就要。”说完给了个样例就转身走了。以下是样例:
张三
13800000000
李四
13900000000
Google、百度……店小二几乎试了所有的搜索引擎,可是毫无线索,根本就没有软件能够直接完成这项工作。于是,他偷偷钻进了掌柜的私人书房,找出了那本《批处理高级菜谱》,细细研究之后,试着写出了下面的代码。
@echo off
for /f “eol=; tokens=1,5 delims=, ” %%i in (custom.txt) do echo %%i %%j >> new.txt
在上期的《DOS快餐店》中大家学习了使用参数/L来让for语句支持数字序列,同样地,参数/f实现的功能是让循环支持分离选项。所谓分离,就是将一行文字中通过某种方式(如空格)进行分割的元素分离出来,供循环后的执行代码使用。
“eol=;”是指忽略以分号开头的行,就是说如果某一行如果类似于“;张小三……”,那这行将不被循环处理。“tokens=1,5”是指提取分离出来的第1个和第5个元素,“delims=,”是指分割方式,空格和“/”则无需指定,直接作为默认分割符。经过这样分离循环后,一行中的第1个和第5个元素被分别赋值给了变量%%i和%%j,刚才一行资料中的第1个元素是姓名,而第5个元素则是电话,然后再将这两个存有所需元素的变量值追加写入到new.txt中,之所以用追加写入,是因为循环要处理很多行,如果不使用“>>”追加在末尾的话,则会覆盖掉上一行循环中写入的数据。

DIY你的DOS菜
上期答案:
1.将1到100的数字按顺序逐个写入num.txt中,每个数字占一行。
for /L %%c in (1,1,100) do echo %%c >> num.txt
2.将当前目录下的所有文件都加上“dos”前缀,比如1.jpg改名为dos1.jpg。
@echo off
for %%f in (*.*) do ren %%f dos%%f

 

转自cfan,感谢PK分享经验

评论被关闭。