文档库 最新最全的文档下载
当前位置:文档库 › for批处理语法

for批处理语法

FOR的语法


FOR是一个循环命令。所谓的循环指,对一组文件逐一运行一条命令,或对一组文件中的每一个文件执行某个特定命令。FOR常用于循环命令、遍历查询、解析文本等。


1、FOR的基本语法格式:

FOR /参数 %%I IN (Command1) DO Command2

FOR /参数 %%字母 IN (集合) DO 命令 [命令参数]

FOR /参数 %%Variable IN (Set) DO Command [Command-Parameters]

(注意:这三条命令的语法格式都一致,只是表示方式不同而已。一般情况下,本教程采用第一条表达,采用第二条讲解,采用第三条补充。)


2、用法:

一句话总结:从集合中依次逐一提取变量执行后面的命令。


FOR—IN—DO

这是FOR命令的基本结构,三个基本组成部分缺一不可。


FOR:

负责打开循环命令开关。


IN

负责从集合中抽取元素替换变量。它后面的括号不能省略。


DO

负责安排需要执行的命令和动作。它可以是一个命令如echo,也可以是一组命令如if exist。


/参数、%%I、(Command1)、Command2是它的动态组成部分,也是我们讲解的重点。


参数:

用来解释FOR,设置循环的模式。FOR常用的参数有/D、/F、/R、/L。


变量:

形式如%%I。集合中用来执行后面命令的任意一个可能的数值,需要执行命令的对象,一个替换位置。当它空缺时是变量,当FOR运行时它抽取集合里的数值替换自己,从而变成一个固定值。因此它来自集合,限于集合范围。


集合

范围、总量。是一个数据库,由固定数值组成,向变量提供固定数值,用于替换变量。变量和集合的关系是需求与供给的关系。集合的个数决定了需要循环的次数。集合要用括号括起来,不能缺少。


3、FOR的处理流程:

打开循环命令FOR。

第一步,从集合中抓取第一个数值A。用A替换形式变量%%I。用被A替换的%%I运行一次DO后面的命令Command2。

第二步、从集合中抓取第二个数值B。用B替换形式变量%%I。用被B替换的%%I运行一次DO后面的命令Command2。

第三步、从集合中抓取第三个数值C。用C替换%%I。用被C替换的%%I执行DO后面的命令。

…………

“抓取-替换-执行命令”机器根据命令不停地从集合中抓取数值替换变量执行后面的命令。一次只处理一个数值,依次循环下去,直至集合中的数值全部被处理过。

这就是FOR命令的奥秘所在:逐个抓取,依次完成。
三、实战应用


理论的东西太过抽象,我们用事例来解释。回头看看前面的故事,李四如何用那串钥匙开锁?


1、钥匙的启示

可能很多人一下子就想到了,既然钥匙在手中,何不一个一个的试,看哪个能打开。钥匙有一大串,而门锁

只有一个孔,所以,一次你只能试一根钥匙。一根一根的试,直到找到那根能够打开锁的钥匙。

FOR的工作原理类似于此。


集合(Command1)相当于钥匙串,它由许多个数值(钥匙)组成。变量%%I就是尝试开门锁的那根钥匙,它是从钥匙串里抓取出来的,不特指哪根。DO+命令就是尝试开门锁。

FOR每次从集合(钥匙串)中抓取一个数值(一根钥匙),然后用这个数值执行DO后面的命令(尝试开锁)。FOR不是一次就同时抓取集合里的所有数值(所有钥匙),而是逐个的抓取,逐个的执行,直至轮完所有的数值(钥匙)。

钥匙要一个一个的试,数值也是要一个一个的轮。一次一个,轮流完成。


2、我爱北京天安门

为了加深理解,再看一个具体的例子。

@echo off

for %%I in (我爱北京天安门) do echo %%I

pause>nul



运行结果是显示:

我爱北京天安门


修改一下,用点号把“我爱北京天安门”分成三段:

@echo off

for %%I in (我爱,北京,天安门) do echo %%I

pause>nul


结果显示:

我爱

北京

天安门


对比一下结果,修改前的显示结果是一行完整的句子,而修改后的显示结果变成了三行。为什么会这样呢?

这要从FOR命令的运行过程说起:

FOR命令要从“我爱北京天安门”这个句子里抽取IN一个字词作为变量%%I并显示echo到屏幕上,它必须先区分和计算这个集合(Command1)“我爱北京天安门”有多少个变量,区分的方法通常是用点号和空格来隔开每个字词。上例用两个点号将“我爱北京天安门”分割成三段:“我爱”、“北京”、“天安门”。

FOR命令执行时,它并非一次性将“我爱”、“北京”、“天安门”三个变量同时全部抓出来echo到屏幕上,而是按照先后顺序逐个抓取。


它首先抓取IN排在第一位的“我爱”作为形式变量%%I,然后做DO下一步动作,显示echo到屏幕上。因此,“我爱”成了独立的第一行。

接着,FOR抓取括号里的第二个元素“北京”作为形式变量显示到屏幕上,“北京”成为第二行。

第三步,FOR抓取“天安门”显示到屏幕上成为第三行。


FOR命令就这样一次一个的、按顺序的从括号里(Command1)抓取元素作为形式变量%%I,然后显示到屏幕上,从第一个轮流循环到最后一个。


4、手枪

如果把弹夹当作一个集合,子弹当作集合里的元素,枪膛弹槽就是变量,动作命令就是扣动扳机,撞针在弹簧的作用下撞击子弹,从而把子弹发射出枪膛。手枪枪膛的弹槽和撞针只有一个,决定了它一次只能打出去一颗子弹,它不能一次同时打出去两颗子弹。

打手枪的过程很好的解释了FOR命令执行的过程,FOR

命令也一样。它一次只能从集合里抽取一个数值来执行后面的命令,而不能同时抽取两个。


FOR不能一次同时全部执行所有集合中的任务,它总是分批、分次的执行。时间是一次、数量是一个,方式是依次。本节不厌其烦、不辞辛苦的举证、讲解的目的就是让大家明白,FOR命令无论有多复杂它都遵循这条最基本的准则,理解了这点你才能理解FOR命令,在以后FOR的学习运用中左右逢源、得心应手。


5、练习:

1、请默写出FOR命令的语法格式。

2、请向你的身边的朋友说说FOR命令的运行过程。

3、请尝试编写一个用FOR显示“l love you!”的批处理。

第二节 FOR的集合与变量


本节将FOR的“集合”和“变量”放在一起的原因是,两者之间存在着相互关系。

集合向变量提供元素替换变量,因此是供应者,它决定了变量的取值范围。用术语说,集合赋值给形式变量。

变量为集合内的元素提供赋值位置,它只能从集合限定的范围取值,因此是需求者。

集合赋值给变量,变量又向DO命令赋值,这个过程构成一个FOR的循环。集合内元素的总量决定了FOR循环的次数。


二、集合


(一)概述

FOR命令常见的三种表达方式:IN (Command1)、 IN (集合)、 IN (Set)。

集合,也称集。在批处理里,它确定一个范围、总量,是一个数据库,由固定数值(元素)组成,向变量提供固定数值,用于替换变量。变量和集合的关系是需求与供给的关系。集合的个数决定了需要循环的次数。

集合必须用圆括号括起来。


集合里的内容包罗万象。可以是单个字符,也可以是字符串,可以是文件,也可以是命令。我们见得最多有:

路径+文件名:如c:\note.txt

文本:如歌曲列表.txt

字词:如我爱北京天安门

数字:如123

符号:如+、-、*、\

命令:如’set’

盘符:如c:\

还有时间、进程、注册表、服务、内存管理、启动等等。


集合里可以是只有一个元素(数值),如:“我爱北京天安门”

也可以有多个,如:“c: d: e: f:”

甚至所有、全部,如:*.*

可以确指,如“我爱北京天安门”

也可以是模糊的,如:w?s.*


(二)FOR与文件查询


由于FOR也可以用来查询文件,FOR结合通配符查询文件的功能要比DIR强得多,因此有必要结合通配符来谈谈FOR命令。

通配符(?和*)常用来代替未具体指明的文件和数据。

?代表单个字符。

* 代表全部字符。

将通配符用于集合内,FOR可以展现强大的搜索能力。


1、查询当前目录(批处理命令所在的位置)的所有文件:

@echo off

for %%i in (*.*) do echo "%%i"

pause

讲解:

*.*的第一个星

号表示文件名,第二个星号表示扩展名,整体表示所有类型的文件。


2、列举当前目录下所有扩展名为txt的文件:

@echo off

for %%i in (*.txt) do echo "%%i"

pause

讲解:

*.txt表示所有扩展名为txt的文件,也就是所有文档(记事本)文件了。


3、查询txt和doc两种类型的文档:

@echo off

for %%i in (*.doc *.txt) do echo "%%i"

pause

讲解:

集合里包含两个元素*.doc和*.txt,两者之间六个空格。*.doc是所有WORD文档。


4、查询文件名只有两个字符的文档:

@echo off

for %%i in (??.txt) do echo %%i

pause

讲解:

??表示两个字符,也就是文件名只有两个字母或两个汉字了的文档。


5、查询文件名第二个字母为O的mp3文件:

@echo off

for %%i in (?o*.mp3) do echo %%i

pause

讲解:

?和o存在先后顺序,?是第一个字符,o是第二个字符,*代表剩余的字符。

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

pause

讲解:

文件名含有字母“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


10、查询C盘下的所有文件夹,包括子目录:

@echo off

For /r c:\ %%i in (.) do echo %%i

Pause

讲解:

如果集合只是一个句点 (.),则只枚举目录树。

似乎除了*,使用其他字符搜索到的都是目录,但文件夹后面都跟了一个点号。


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盘又没设保护,为什么?

涉及长文件名,中间有空格亦无法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文档中。


(三)常见的集合类型


1、 集合内的文字字符串(string)

例:我爱北京天安门

for %%I in (我爱北京天安门) do echo %%I


2、集合内的文件名(filename-set)

例:静夜思.txt

for /f %%i in (静夜思.txt) do echo %%i


3、集合内的命令(command)

例:二次过滤:

for /f "eol=;" %%a in ('for /f "eol=S" %%b in ^(a.txt^)do @echo %%b') do echo %%a


4、集合内的变量(%var%)

例:自动关机:

set times=

set /p times=请输

入关机时间:

:: 以下语句实现每个星期的每一天指定时间关机

:: 如果要换成每个月的某几天,请改字母为数字,并用逗号分隔

:: 以下代码没有错误检测语句,输入时间的时候务必按照指定格式输入

:: 可以用在CMD窗口用at命令来查看计划任务

if not "%times%"=="" for %%i in (%times%) do (

at %%i /every:M,T,W,Th,F,S,Su shutdown -s

)


二、变量的用法


(一)概述

1、FOR命令必须使用变量,且变量的格式是两个百分号紧挨一个字母,如:%%a。

同一个FOR命令内,变量后面的字母之间存在先后顺序。一般情况下,使用了%%a做变量,再增加个变量的话就应该是%%b、%%c,依此类推。

变量要区分大小写,%%A是不同于%%a的。

2、

3、变量的固值化。

这段是废话,可免读。

前面提到过,变量其实是一个虚拟的位置,该位置是想DO提供命令执行对象的。同时它也向集合提供跳板,集合里的元素要出来执行DO后面的命令,它就要替换外面的变量,用变量做跳板执行DO。说白了,其实是变量借了集合的名,变量本身没有任何实质东西,真正执行DO的是集合里的元素,而非变量本身。

为什么不跳过变量这一关直接用集合内的元素执行DO?这个问题比较深奥,这里不做讨论。这涉及到变量的存在设计,最好去问工程师。

用前面的“钥匙的启示”来说,钥匙串提供钥匙,门锁提供锁孔,两者缺一不可,两者合作才能做开锁的动作。 变量的固值化说白了就是取出一个钥匙插入锁孔内。理论上讲就是变量被集合内的元素替换的过程。如果变量不替换成集合捏的元素,变量就是一个空壳,空壳无法完成DO命令。而集合内的元素如果没有变量提供的位置,它就毫无立足之地。

4、输入变量与输出变量

简单讲,DO前面的变量是输入变量,DO后面的变量是输出变量。

比如:

for %%i in (.) do echo %%i

第一个%%i是输入变量,第二个%%i是输出变量。

做个形象的比喻:集合是一个劳务输出大国,它输出劳动力给FOR公司,FOR公司提供就业岗位%%i,该劳动岗位的工作DO就是command2。从FOR公司角度来看,提供就业岗位就是输入变量——吸收人才,参加工作就是输出变量——创造业绩。


二)扩充变量

扩充变量可以增强FOR 命令,以下是拷贝官方的帮助文件,稍作补充。


FOR 变量参照的替换已被增强。您现在可以使用下列选项语法:

~I - 删除任何引号("),扩充 %I

%%~fI - 将 %I 扩充到一个完全合格的路径名(完整路径名)

%%~dI - 仅将 %I 扩充到一个驱动器号(只显示盘符)

%%~pI - 仅将 %I 扩充到一个路径(只提取路径)

%%~nI - 仅

将 %I 扩充到一个文件名(只提取文件名)

%%~xI - 仅将 %I 扩充到一个文件扩展名(只提取后缀格式)

%%~sI - 扩充的路径只含有短名(过长的文件名将被缩减)

%%~aI - 将 %I 扩充到文件的文件属性(a只读,h隐藏)

%%~tI - 将 %I 扩充到文件的日期/时间(创建修改时间)

%%~zI - 将 %I 扩充到文件的大小(kb)

%%~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩充到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩充到空字符串。

可以组合修饰符来得到多重结果:

%%~dpI - 仅将 %I 扩充到一个驱动器号和路径

%%~nxI - 仅将 %I 扩充到一个文件名和扩展名

%%~fsI - 仅将 %I 扩充到一个带有短名的完整路径名

%%~dp$PATH:i - 查找列在路径环境变量的目录,并将%I 扩充到找到的第一个驱动器号和路径。

%%~ftzaI - 将 %I 扩充到类似输出线路的 DIR

在以上例子中,%%I 和 PATH 可用其他有效数值代替。%%~ 语法用一个有效的 FOR 变量名终止。选取类似 %%I 的大写变量名比较易读,而且避免与不分大小写的组合键混淆。

在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I。同时不能有 52 个以上都在使用中。


很多人都搞不懂有关FOR命令的官方帮助文件,因为翻译实在太不近人情了。此处你只要抓住以上十一个扩充变量的用法就可以了,具体作用等你用到了再查吧。


1、选项~I的用法

例:注意观察双引号。

创建文本“删除引号.txt”:

“你贵姓”

“偶姓‘朱’,名‘立业’,‘朱立业’”

“猪立叶?”

“嗯!”

“今年多大了?”

“16。”


"2009年1月15日"

ba"____"ch

"1+1"="?"

‘2’


代码:

@echo off

FOR /F "delims=" %%i IN (删除引号.txt) DO echo %%~i

pause


运行结果:

1)中文状态的双引号一个都没消失。证明其对中文状态双引号不起作用。如“16。”

2)英文状态的双引号最外围的被删除(帘危┝恕5 屑涞幕乖凇H?/span>"1+1"="?"

3)英文状态的单引号没有被删除。如‘2’


讲解:

该命令适合于从其他地方提取字符串,并将字符串中最外围的双引号删除,以便用于做其他命令。看下例:


@echo off

for %%a in ("伟大的中国人民万岁 万岁 万万岁") do echo.%%~a

pause>nul

运行结果:

伟大的中国人民万岁 万岁 万万岁


讲解:

如果不使用双引号将分段显示。使用中文状态的双引号显示结果带有双引号。但使用英文状态的双引号(””)结果显示则很干净。


2、其他选项的用法

例:只查看文件名:

@echo off

for %%i in (*.*) do echo %%~ni

pause>nul

讲解:

%%~ni能够提取文件名,用此命令来提取你电脑里的歌曲名称将是最好的选择。


例:

查看日期大小文件名:

@echo off

for %%i in (*.*) do echo %%~ztni

pause>nul

讲解:

有时候,你想查看文件的日期、大小、属性等,可以组合使用扩充变量。这个在杀毒时或许用得上。


扩充变量虽然多,但用法基本一致,只需用其他扩充变量替换%%~ni即可体验它们的功效,这里不再一一赘述。

注意扩充变量最后的字母I,它并非固定的,输入变量是什么它就该是什么。

比如使用%%~$PATH:I:


@echo off

for /r %%a in (*.*) do echo %%~$PATH:a

pause>nul

讲解:

第一个%%a使用了a,那么第二个%%a还是用a,并不因为增加了扩充变量~$PATH:而改变。不能生套硬搬公式一律用I。

扩充环境变量常用来提取一些关键字符,或排除其他一些多余因素。


(三)系统变量

(暂时省略)

第三节 FOR的DO


一、概述

DO后面跟一个或一组命令。表示每一次FOR循环需要执行的命令。

有时候,DO后面的命令过于复杂,需要用括号括起来表示一个整体。


二、类型

1、一个命令:

for %%i in (?o*.mp3) do echo %%i

2、一组命令:

for /r d: %%i in (QQ.exe) do if exist %%i start %%i


1、 需要括号:

@echo off

color 0A

for /l %%a in (1,2,8) do (

for /l %%b in (3,3,18) do (

for /l %%c in (100,-15,30) do (

echo %%a %%b %%c

)

)

)

pause

三、运用

(省略,请看第五节《FOR命令的综合应用》)

第四节 FOR的参数


FOR常见的参数有/D、/R、/F、/L。内容比较多,需要逐一消化。

课时建议:

参数/D、/R与/L用一课时;参数/F用四课时,其中eol=和skip=用一课时,delims=、tokens=和usebackq各用一课时。下面逐一讲解。


一、/D参数——查询目录


格式:

FOR /D %%I IN (Command1) DO Command2

用法:

一句话总结:/D用于搜索目录(或文件夹)。

注意:

只搜索文件夹,不搜索文件。只搜索指定目录,不搜索子目录。


例211:搜索C盘下的所有目录:

@echo off

for /d %%i in (c:\*) do echo %%i

pause


运行结果是显示C盘下所有的文件夹名字,但不包含子目录。


例212:搜索当前目录中的文件夹:

@echo off

for /d %%i in (*) do echo %%i

pause

运行结果是显示批处理所在目录下的所有文件夹。


练习:

1、请比较查询命令DIR与FOR /D。

2、请编写一个只搜索文件名而不搜索文件夹名的批处理。


二、/R参数——遍历搜索


格式:

FOR /R %%I IN (Com

mand1) DO Command2

FOR /R [[drive:]path] %%variable IN (set) DO command [command-parameters]

注意:

/R后可以指定路径[[drive:]path]。

用法:

一句话总结:遍历所有地址搜索文件。

包括搜索所有子目录。比/D搜索的范围要大。遍历?递归?全部,每个角落。

通常,/D只搜索当前目录或者指定目录,而不深入子目录。

而/R搜索的范围从当前目录或指定目录开始,深入所有子目录。无孔不入,大有活要见人死要见尸掘地三尺也要把你找出来的气势。


例221:搜索当前目录下的所有文件。

@echo off

for /r %%i in (*) do echo %%i

pause

运行结果将显示,当前目录下的所有文件以及该目录下所有子目录里的所有文件。


例222:搜索C盘里所有的扩展名为exe的文件。

@echo off

for /r c:\ %%i in (*.exe) do echo %%i

pause

运行结果将显示C盘和C盘里各个文件夹下的exe文件。杀毒很有用哦。


例:搜索C盘千千静听播放器:

@echo off

for /r c:\ %%i in (ttplayer.exe) do if exist %%i start %%i

pause

运行结果将打开千千静听,前提是你的千千静听装在C盘。使用if exist的目的是避免文件不存在时不断的提示错误。

检查了一下,无法读出长文件名,思考中。如果你的千千静听默认安装在C盘,更简单的方法是:

start %Progra~1%\ttplayer\ttplayer.exe

讲解:

一句命令就足够了,效率啊!我的在D盘都找出来了!

用到环境变量的内容。不支持长文件名所以使用了%Progra~1%代替Program Files。


例223:搜索F盘里所有目录。

@echo off

for /r f:\ %%i in (.) do echo %%i

pause

运行结果将显示F盘以及F盘下所有的文件夹。显示结果后面都带有一个点号不懂如何消除,一直在思考一个完美的方式,请诸位指点。


练习:

1、请说说FOR /R的作用。

2、请比较参数/D和/R。

3、请编写一个全盘搜索QQ.exe的批处理。

4、请编写一个搜索C盘里所有名字带“SYS”的文件夹的批处理。
三、/L 参数——序列


格式:

FOR /R %%I IN (Command1) DO Command2

FOR /L %%variable IN (start,step,end) DO command [command-parameters]

用法:

一句话总结:给指定对象建立序列。

/L参数是以增量形式从开始到结束的一个数字序列的迭代数值范围。

使用迭代变量设置起始值 (Start#),然后逐步执行一组范围的值,直到该值超过所设置的终止值 (End#)。

/L 将通过对 Start# 与 End# 进行比较来执行迭代变量。如果 Start# 小于 End#,就会执行该命令。如果迭代变量超过 End#,则命令解释程序退出此循环。还可以使用负的 Step# 以递减数值的方式逐步执行此范围内的值。


用FOR给1到5这几个数字排一下顺序。

例:递增方式



@echo off

for /l %%i in (1,1,5) do @echo %%i

pause

运行结果是生成序列:1 2 3 4 5。


例:递减方式。

@echo off

for /l %%i in (1,-1,5) do @echo %%i

pause

运行结果是生成序列:5 4 3 2 1。


注意:

集合(start,step,end)中,start表示序列的起始值,end表示序列的结束值,两者共同决定了序列的取值范围。

step控制着start和end的生成方式。当step为正时是递增序列,当step为负时是递减序列。如果step=0则循环下去?


例:start,step,end三者的数值关系。

@echo off

for /l %%i in (2,2,13) do echo %%i

pause>nul

运行结果分行显示2、4、6、8、10、12

讲解:

start,step,end三者的数值关系是:

start > end

当step为正时,start+step决定%%i的最小取值范围,end决定%%i的最大取值范围。

当step为负时,start+step决定%%i的最大取值范围,end决定%%i的最小取值范围。


例:创建三个以数字1、2、3命名的文件夹。

@echo off

for /l %%i in (1,1,3) do md %%i

exit>nul

运行结果将在当前目录下创建三个以数字命名的文件夹。


讲解:“毒虫”们一看见该命令无比兴奋,如果把(1,1,3)里面的3改成九位数的3那岂不是……

个人不是很熟悉,但看人家写的作品时倒是经常出现这个/l。请看第五节第三个案例《神奇读心术》。


练习:

1、请用所学的批处理知识说说(a,-1,z)的意思。

2、请编写一个打开十个IE浏览器窗口的批处理。

3、请编写一个可以名字是随机数字扩展名为.exe的批处理。
四、/F 参数


格式:

FOR /F ["options"] %%variable IN (file-set) DO command [command-parameters]

FOR /F ["options"] %%variable IN ("string") DO command [command-parameters]

FOR /F ["options"] %%variable IN ('command') DO command [command-parameters]


用法:

一句话总结:常用于文本信息编辑,如查询、提取、替换等等。

迭代及文件解析,使用文件解析来处理命令输出、字符串及文件内容。


注意:

带引号的字符串"options"包括一个或多个指定不同解析选项的关键字:eol=、skip=、delims=、tokens=和usebackq。后面将逐个讲解。


先创建一个文本文件a.txt,内容如下:

::我的测试

aaa,bbb,ccc,ddd

iii jjj kkk lll

eee,fff,ggg,hhh

你好,甲兵,考试,吃饭


将本内容保存好,后面内容都要用到该文本做试验。


(一) eol=c 忽略以某字符开头的行


格式:

FOR /F "eol=c" %%I IN (Command1) DO Command2

用法:

eol=c

一句话总结:表示忽略(隐藏、屏蔽)开头字符是C的行。

“指定行尾字符(仅一个字符)。”这是帮助文件里的话,目前不理解它的用法。

Eol=

默认情况下屏蔽冒号开头的行

如果C是文本某行开头

第一个字符,即“eol=a”,它将在屏幕上屏蔽掉以a开头的行。


例如:文本“静夜思.txt”的内容是:

床前明月光,

疑是地上霜;

举头望明月,

低头思故乡。


如何忽略掉文本文件a.txt中的第三行:“举头望明月,”?

@echo off

for /f "eol=举" %%i in (静夜思.txt) do echo %%i

pause>nul

运行结果将隐藏第三行。


注意:

如果忽略的字符串的开头是重复字符,则EOL后只需截取一个字符。

如要“aaa”,“eol=”后只需一个“a”就可以了。同样,双冒号“::”只取一个。


练习:

请用skip屏蔽掉文本“a.txt”中的第四行,即隐藏行“eee,fff,ggg,hhh”。

拓展思考:如何文本中的最后一行?


(二)skip=n 忽略前N行


格式:

FOR /F "skip=n" %%I IN (Command1) DO Command2

用法:

一句话总结:忽略文本开头的前N行。

skip=n表示忽略(屏蔽、隐藏)从第一行到第N行的内容。(n>0)


例:忽略文本a的前四行。

@echo off

for /f "skip=4" %%i in (a.txt) do echo %%i

pause>nul

运行结果将只显示第五行。


练习:

忽略掉文本“a.txt”中的第一行有几种方法?

拓展思考:如何单纯屏蔽第五行?

相关文档