for批处理语法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

路径+文件名:如c:\note.txt
文本:如歌曲列表.txt
字词:如我爱北京天安门
数字:如123
符号:如+、-、*、\
命令:如’set’
盘符:如c:\
还有时间、进程、注册表、服务、内存管理、启动等等。
集合里可以是只有一个元素(数值),如:“我爱北京天安门”
也可以有多个,如:“c: d: e: f:”
FOR命令执行时,它并非一次性将“我爱”、“北京”、“天安门”三个变量同时全部抓出来echo到屏幕上,而是按照先后顺序逐个抓取。
它首先抓取IN排在第一位的“我爱”作为形式变量%%I,然后做DO下一步动作,显示echo到屏幕上。因此,“我爱”成了独立的第一行。
接着,FOR抓取括号里的第二个元素“北京”作为形式变量显示到屏幕上,“北京”成为第二行。
(三)常见的集合类型
1、 集合内的文字字符串(string)
例:我爱北京天安门
for %%I in (我爱北京天安门) do echo %%I
2、集合内的文件名(filename-set)
例:静夜思.txt
2、用法:
一句话总结:从集合中依次逐一提取变量执行后面的命令。
FOR—IN—DO
这是FOR命令的基本结构,三个基本组成部分缺一不可。
FOR:
负责打开循环命令开关。
IN
负责从集合中抽取元素替换变量。它后面的括号不能省略。
DO
负责安排需要执行的命令和动作。它可以是一个命令如echo,也可以是一组命令如if exist。
打手枪的过程很好的解释了FOR命令执行的过程,FOR命令也一样。它一次只能从集合里抽取一个数值来执行后面的命令,而不能同时抽取两个。
FOR不能一次同时全部执行所有集合中的任务,它总是分批、分次的执行。时间是一次、数量是一个,方式是依次。本节不厌其烦、不辞辛苦的举证、讲解的目的就是让大家明白,FOR命令无论有多复杂它都遵循这条最基本的准则,理解了这点你才能理解FOR命令,在以后FOR的学习运用中左右逢源、得心应手。
变量为集合内的元素提供赋值位置,它只能从集合限定的范围取值,因此是需求者。
集合赋值给变量,变量又向DO命令赋值,这个过程构成一个FOR的循环。集合内元素的总量决定了FOR循环的次数。
二、集合
(一)概述
FOR命令常见的三种表达方式:IN (Command1)、 IN (集合)、 IN (Set)。
2、列举当前目录下所有扩展名为txt的文件:
@echo off
for %%i in (*.txt) do echo "%%i"
pause
讲解:
*.txt表示所有扩展名为txt的文件,也就是所有文档(记事本)文件了。
3、查询txt和doc两种类型的文档:
@echo off
/参数、%%I、(Command1)、Command2是它的动态组成部分,也是我们讲解的重点。
参数:
用来解释FOR,设置循环的模式。FOR常用的参数有/D、/F、/R、/L。
变量:
形式如%%I。集合中用来执行后面命令的任意一个可能的数值,需要执行命令的对象,一个替换位置。当它空缺时是变量,当FOR运行时它抽取集合里的数值替换自己,从而变成一个固定值。因此它来自集
文件名含有字母“F”,但不包括文件夹在内。
8、查询C盘下的所有文件,不包括子目录:
@echo off
for %%i in (c:\*) do echo %%i
pause
9、查询C盘下的所有文件,包括子目录:
@echo off
For /r c:\ %%i in (*) do echo %%i
pause
讲解:
??表示两个字符,也就是文件名只有两个字母或两个汉字了的文档。
5、查询文件名第二个字母为O的mp3文件:
@echo off
for %%i in (?o*.mp3) do echo %%i
pause
讲解:
?和o存在先后顺序,?是第一个字符,o是第二个字符,*代表剩余的字符。
FOR的工作原理类似于此。
集合(Command1)相当于钥匙串,它由许多个数值(钥匙)组成。变量%%I就是尝试开门锁的那根钥匙,它是从钥匙串里抓取出来的,不特指哪根。DO+命令就是尝试开门锁。
FOR每次从集合(钥匙串)中抓取一个数值(一根钥匙),然后用这个数值执行DO后面的命令(尝试开锁)。FOR不是一次就同时抓取集合里的所有数值(所有钥匙),而是逐个的抓取,逐个的执行,直至轮完所有的数值(钥匙)。
FOR /参数 %%字母 IN (集合) DO 命令 [命令参数]
FOR /参数 %%Variable IN (Set) DO Command [Command-Parameters]
(注意:这三条命令的语法格式都一致,只是表示方式不同而已。一般情况下,本教程采用第一条表达,采用第二条讲解,采用第三条补充。)
这就是FOR命令的奥秘所在:逐个抓取,依次完成。
三、实战应用
理论的东西太过抽象,我们用事例来解释。回头看看前面的故事,李四如何用那串钥匙开锁?
1、钥匙的启示
可能很多人一下子就想到了,既然钥匙在手中,何不一个一个的试,看哪个能打开。钥匙有一大串,而门锁只有一个孔,所以,一次你只能试一根钥匙。一根一根的试,直到找到那根能够打开锁的钥匙。
5、练习:
1、请默写出FOR命令的语法格式。
2、请向你的身边的朋友说说FOR命令的运行过程。
3、请尝试编写一个用FOR显示“l love you!”的批处理。
第二节 FOR的集合与变量
本节将FOR的“集合”和“变量”放在一起的原因是,两者之间存在着相互关系。
集合向变量提供元素替换变量,因此是供应者,它决定了变量的取值范围。用术语说,集合赋值给形式变量。
钥匙要一个一个的试,数值也是要一个一个的轮。一次一个,轮流完成。
2、我爱北京天安门
为了加深理解,再看一个具体的例子。
@echo off
for %%I in (我爱北京天安门) do echo %%I
pause>nul
运行结果是显示:
我爱北京天安门
这要从FOR命令的运行过程说起:
FOR命令要从“我爱北京天安门”这个句子里抽取IN一个字词作为变量%%I并显示echo到屏幕上,它必须先区分和计算这个集合(Command1)“我爱北京天安门”有多少个变量,区分的方法通常是用点号和空格来隔开每个字词。上例用两个点号将“我爱北京天安门”分割成三段:“我爱”、“北京”、“天安门”。
涉及长文件名,中间有空格亦无法start。如:C:\Program Files,如何解决?
12、搜索F盘mp3文件:
@echo off
for /r f:\ %%i in (*.mp3) do echo %%i>>music.txt
pause>nul
讲解:
将搜索到的mp3文件保存到music.txt文档中。
修改一下,用点号把“我爱北京天安门”分成三段:
@echo off
for %%I in (我爱,北京,天安门) do echo %%I
pause>nul
结果显示:
我爱
北京
天安门
对比一下结果,修改前的显示结果是一行完整的句子,而修改后的显示结果变成了三行。为什么会这样呢?
?代表单个字符。
* 代表全部字符。
将通配符用于集合内,FOR可以展现强大的搜索能力。
1、查询当前目录(批处理命令所在的位置)的所有文件:
@echo off
for %%i in (*.*) do echo "%%i"
pause
讲解:
*.*的第一个星号表示文件名,第二个星号表示扩展名,整体表示所有类型的文件。
6、查询以F开头的文件:
@echo off
for %%i in (F*.*) do echo %%i
pause
讲解:
F*.*T表示文件名以“F”开头,扩展名以“T”结尾的文件。
7、查询含有字母F的文件:
@echo off
for %%i in (*F*) do echo %%i
FOR的语法
FOR是一个循环命令。所谓的循环指,对一组文件逐一运行一条命令,或对一组文件中的每一个文件执行某个特定命令。FOR常用于循环命令、遍历查询、解析文本等。
1、FOR的基本语法格式:
FOR /参数 %%I IN (Command1) DO Command2
集合
范围、总量。是一个数据库,由固定数值组成,向变量提供固定数值,用于替换变量。变量和集合的关系是需求与供给的关系。集合的个数决定了需要循环的次数。集合要用括号括起来,不能缺少。
3、FOR的处理流程:
打开循环命令FOR。
第一步,从集合中抓取第一个数值A。用A替换形式变量%%I。用被A替换的%%I运行一次DO后面的命令Command2。
甚至所有、全部,如:*.*
可以确指,如“我爱北京天安门”
也可以是模糊的,如:w?s.*
(二)FOR与文件查询
由于FOR也可以用来查询文件,FOR结合通配符查询文件的功能要比DIR强得多,因此有必要结合通配符来谈谈FOR命令。
通配符(?和*)常用来代替未具体指明的文件和数据。
第三步,FOR抓取“天安门”显示到屏幕上成为第三行。
FOR命令就这样一次一个的、按顺序的从括号里(Command1)抓取元素作为形式变量%%I,然后显示到屏幕上,从第一个轮流循环到最后一个。
4、手枪
如果把弹夹当作一个集合,子弹当作集合里的元素,枪膛弹槽就是变量,动作命令就是扣动扳机,撞针在弹簧的作用下撞击子弹,从而把子弹发射出枪膛。手枪枪膛的弹槽和撞针只有一个,决定了它一次只能打出去一颗子弹,它不能一次同时打出去两颗子弹。
集合,也称集。在批处理里,它确定一个范围、总量,是一个数据库,由固定数值(元素)组成,向变量提供固定数值,用于替换变量。变量和集合的关系是需求与供给的关系。集合的个数决定了需要循环的次数。
集合必须用圆括号括起来。
集合里的内容包罗万象。可以是单个字符,也可以是字符串,可以是文件,也可以是命令。我们见得最多有:
Pause
10、查询C盘下的所有文件夹,包括子目录:
@echo off
For /r c:\ %%i in (.) do echo %%i
Pause
讲解:
如果集合只是一个句点 (.),则只枚举目录树。
似乎除了*,使用其他字符搜索到的都是目录,但文件夹后面都跟了一个点号。
for %%i in (*.doc *.txt) do echo "%%i"
pause
讲解:
集合里包含两个元素*.doc和*.txt,两者之间六个空格。*.doc是所有WORD文档。
4、查询文件名只有两个字符的文档:
@echo off
for %%i in (??.txt) do echo %%i
11、全盘搜索文件desktop.ini:
@echo off
FOR %%a IN (C: D: E: F:) DO cd /d %%a & for /r %%b in (desktop.ini) do if exist %%b echo %%b
pause
注意:
凡是涉及D盘的都搜索不出来,而我的大部分exe都放在D盘,D盘又没设保护,为什么?
第二步、从集合中抓取第二个数值B。用B替换形式变量%%I。用被B替换的%%I运行一次DO后面的命令Command2。
第三步、从集合中抓取第三个数值C。用C替换%%I。用被C替换的%%I执行DO后面的命令。
…………
“抓取-替换-执行命令”机器根据命令不停地从集合中抓取数值替换变量执行后面的命令。一次只处理一个数值,依次循环下去,直至集合中的数值全部被处理过。
相关文档
最新文档