批处理命令For循环命令详解
批处理for命令详解
批处理 for 命令详解
FOR 参数 %%变量名 IN (相关文件或命令) DO 执行的命令 参数:FOR 有 4 个参数 /d /l /r /f %%变量名: (在命令行中为 %变量名)区分大小写,FOR 会把每个读取到的值给他;
=== 无参数 ---
FOR %variable IN (set) DO command [command-parameters] %variable 指定一个单一字母可替换的参数。 (set) 指定一个或一组文件。可以使用通配符。 command 指定对每个文件执行的命令。 command-parameters 为特定命令指定参数或命令行开关。
=== 参数 /d (只显示当前目录下的目录名字) ---
格式:FOR /D %variable IN (set) DO command [command-parameters] 这个参数主要用于目录搜索,不会搜索文件,/D 参数只能显示当前目录下的目录名字。(TTT 特别说明:只会 搜索指定目录下的目录,不会搜索再下一级的目录。)
示例: for /d %%i in (c:\*) do echo %%i --显示 c 盘根目录下的所有目录 for /d %%i in (???) do echo %%i --显示当前目录下名字只有 1-3 个字母的目录
bat文件中for用法
bat文件中for用法在批处理(batch)文件中,`for` 命令用于循环处理一系列文件或文本行。
下面是 `for` 命令的一些基本用法和示例:1. 基本的 `for` 循环:```batchecho offfor %%i in (1 2 3 4 5) do (echo %%i)```2. 使用 `do` 命令:```batchecho offfor %%i in (1 2 3 4 5) do (echo This is loop %%i)```3. 使用 `in` 命令中的文件:```batchecho offfor %%i in ( ) do (echo %%i has %%~zi bytes )```4. 遍历文件中的每一行:```batchecho offfor /f "tokens=" %%i in () do ( echo %%i)```5. 使用 `delims` 设置分隔符:在处理文本文件时,你可以设置分隔符,以便按特定的格式解析每一行。
例如,假设有一个以逗号分隔的文本文件:```batchecho offfor /f "tokens=1,2 delims=," %%i in () do (echo Column1: %%i, Column2: %%j)```6. 结合 `if` 命令:你还可以在 `for` 循环内部使用 `if` 命令进行条件判断:```batchecho offfor %%i in (1 2 3 4 5) do (if %%i lss 3 (echo Less than 3) else (echo More than or equal to 3))```7. 跳过循环的迭代:可以使用 `continue` 和 `break` 来控制循环的行为:```batchecho offfor %%i in (1 2 3 4 5) do (if %%i == 3 (continue) else (echo %%i))```8. 使用 `set` 命令修改变量:在循环内部,你可以使用 `set` 命令来修改变量的值:```batchecho offsetlocal enabledelayedexpansionfor %%i in (1 2 3 4 5) do (set /a "count+=1"echo Loop count: !count! - %%i)```以上是 `for` 命令的一些基本用法和示例。
bat的for用法
bat的for用法BAT(批处理)中的FOR命令是用于在循环中对一系列项进行操作的命令。
它可以用于遍历文件列表、目录列表、字符串列表等。
下面我将从多个角度详细介绍BAT中FOR命令的用法。
1. 遍历文件列表:FOR命令可以用于遍历指定文件夹中的文件列表。
例如,要遍历当前文件夹中的所有txt文件,可以使用以下命令:for %%F in (.txt) do (。
echo %%F.rem 在此处执行其他操作。
)。
这将逐个输出当前文件夹中的每个txt文件的文件名,并可以在循环中执行其他操作。
2. 遍历目录列表:FOR命令还可以用于遍历指定目录中的子目录列表。
例如,要遍历指定目录及其子目录中的所有文件,可以使用以下命令:for /r "C:\目录路径" %%F in () do (。
echo %%F.rem 在此处执行其他操作。
)。
这将逐个输出指定目录及其子目录中的每个文件的完整路径,并可以在循环中执行其他操作。
3. 遍历字符串列表:FOR命令还可以用于遍历指定的字符串列表。
例如,要遍历一个固定的字符串列表,可以使用以下命令:for %%F in (item1 item2 item3) do (。
echo %%F.rem 在此处执行其他操作。
)。
这将逐个输出指定的字符串列表中的每个字符串,并可以在循环中执行其他操作。
4. 使用变量:在FOR命令中,可以使用变量来存储每次循环中的项。
例如,要将文件列表中的文件名存储在变量中,可以使用以下命令:for %%F in (.txt) do (。
set filename=%%F.echo 文件名,%filename%。
rem 在此处执行其他操作。
)。
这将在每次循环中将文件名存储在变量%filename%中,并可以在循环中使用该变量进行其他操作。
总结:FOR命令在BAT中是一个非常有用的命令,可以用于遍历文件列表、目录列表和字符串列表。
通过合理使用FOR命令,可以实现对指定项的循环操作,并在循环中执行其他命令或操作。
批处理FOR命令详解-就是这里-51CTO技术博客
批处理FOR命令详解-就是这里-51CTO技术博客批处理FOR命令详解 2009-06-03 18:16:48标签:批处理 for对所有的批处理初学者来说,for的应用是最难理解以及掌握的。
本文由浅入深,为大家专门讲解for的用法,希望大家喜欢。
首先应该明确的是,for不是一个简单的命令,它的用法比较复杂,它还可以带四个参数(/L /D /R /F),其中:/L和/F参数是最经常用到的。
当然,它本身也可以不带参数,下面我们通过具体的例子来讲解for的运用。
一、不带参数的for:将以上代码保存为批处理文件(如何保存?),然后运行,可以发现屏幕上显示1 2 3 4 5(每字一行)是不是明白了一些?它的整个运行机制我们可以这样看:for不停的从括号中拿出5个“东西”来(以空格做间隔),并将这5个“东西”依次传给临时变量%%i,同时把这个变量echo出来....从这个例子我们可以看出,for的基本用法是:for 变量 in (目标) do 干什么?变量常用%%i 来表示,当然也可以换成%%j;目标就是待处理的对象集合,比如这里的1 2 3 4 5;这里的干什么的内容为:批处理命令。
【相关习题:】将你的名字用for命令分三行显示出来二、带参数 /L 的for (这里的参数/L 可以理解为 "list" 的意思,代表一个数列)先看测试代码:复制内容到剪贴板代码:显示结果也为:1 2 3 4 5(每字一行)它的意思和上面的意思差不多,但是括号中的对象却不需要写成1 2 3 4 5 的形式了,而是:1 1 5,因为它启用了参数 /L ,就是告诉for,这个括号里的对象是个数列,怎样的数列?就是以 1 开始,步长为1 ,结束值为5的一个等差数列,再举个实例:复制内容到剪贴板代码:::显示从 10 - 20 的所有偶数:【相关习题:】显示 1~20 间能被5整除的整数三、带参数 /f 的for(这里的参数/F可以理解为“file”的意思,代码处理对象为文本串)参考教程:for 命令 /f 参数通俗讲解四、for的 /D 和/R 参数(这两个参数个人比较少用)1>/D参数(常用来查询当前目录或者指定目录的文件夹)基本用法:FOR /D %variable IN (set) DO command [command-parameters]如:查询F盘根目录下的文件夹复制内容到剪贴板代码:夹假设本批处理文件保存在:F:\test下运行以下批处理代码,将会查询 F:\test下的文件夹复制内容到剪贴板代码:/r参数基本用法:FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]检查以[drive:]path 为根的目录树中,所有符合(set)的文件或者文件夹。
DOS批处理命令For循环命令详解
DOS批处理命令For循环命令详解for命令是⼀种对⼀系列对象依次循环执⾏同⼀个或多个命令的在命令⾏或批处理中运⾏的命令,结合⼀些Windows管理中的程序后,其处理功能强⼤、应⽤灵活⽅便程度令⼈刮⽬相看。
但是,其帮助信息也因此复杂往往令初学者望⽽⽣畏,这⾥根据本⼈的学习理解,把其⽤法分解简化,疏忽和错误也许在所难免。
基本格式(这⾥写的是在命令⾏⾥⽤的格式,如果是在批处理中,需要把其中%再多加个%形成%%):for /参数 %变量 in (集) do 命令(注:上⾯除中⽂的以外,其余的是按它的格式要求书写的,⼤⼩写都⾏)参数:FOR分四种参数 D L R F,并且有的参数还可附加另外的选项下⾯会分别介绍变量:(记住如果是在批处理中使⽤for命令时,变量前的%需改为%%)这个变量名是由单个字母组成且区分⼤⼩写(原帮助是这么说的,实际运⽤中⽤单个数字作为变量名试过证明也可⾏),如%B和%b代表的是不同的变量。
FOR命令会在每次循环中,把in (集)中读取到的值赋于这个变量,以便其后的命令中引⽤。
集:由系列⽂件、字符串或由命令产⽣的内容形成的集合(当然可⽤通配符 * ?,还可引⽤环境变量),FOR命令是按⼀定顺序和规律分次读取集中内容,赋值给变量,并执⾏do后的命令,进⾏循环下⼀轮,直⾄集中内容读取完毕,⽽括号是格式必须的(in到后⾯括号之间要有空格)。
命令:可以是任何合格的DOS命令或外部可被DOS调⽤的程序,且可采⽤括号把多条命令括起来,在⼀次循环中执⾏。
附注:由于⼀些⽬录或⽂件名可能会有空格,所以很多时候集⾥和命令⾥往往需要⽤英⽂引号括起来(但有时引号⾥的内容可能会被认为是字符串)表⽰是⼀整体,下⾯开始的有些例中为简捷起见,忽略⽂件名或⽬录名带空格这种情况。
现在按参数分类举例解释其⽤法:⼀、参数 /dfor /d %%变量 in (集) do 命令/d 参数是指定仅对⽬录⽽不是⽂件执⾏的for命令。
批处理命令中for循环基本用法
批处理命令行中for循环基本用法for循环是在办公自动化中非常实用的语句之一,本节讨论DOS语言中for循环的各种模式:如/r,/d,/l,/f等,以及各种参数:如tokens,delims,usebackq等的基本用法。
我们须要根据实际情况选择不同的模式和参数来配置for循环以达到我们的目的。
1、【for语句的常规用法】形式1:for %%i in (字符串集合/数字列表/…) do 命令语句@echo offfor %%i in (aa,bb,cc) do echo %%ipause结果为:aabbcc注:这里如果用点进行分割,字符串会作为一个整体输出如果用逗号分割,则会一次一个单次进行打印。
判断某个磁盘是否存在,如果盘符存在,则输出它:@echo offecho 存在有驱动器:for %%i in (a,b,c,d,e,f,g) if exist %%i: echo %%ipause显示当前目录下的文件名称(非文件夹,文件夹将不会被列出):@echo offfor %%i in (*.*) do echo "%%i"pause仅显示当前目录下的txt文件名称(通配符*.txt的用法):@echo offfor %%i in (*.txt) do echo "%%i"pause把txt换成其他扩展名亦可仅列出其他格式的文件名仅显示当前目录下的txt文件名称(通配符?规定字符个数):@echo offfor %%i in (??.txt) do echo "%%i"pause仅会输出当前目录下文件名为2个字符的txt文件名2、【关于for语句的/f模式(遍历文件内容模式)】①/f模式/f模式用于遍历文件中的内容:@echo offfor /f %%i in (test.txt) do echo %%ipause运行的结果,会逐行打印test.txt文件中的内容②delims参数(表示分隔符)使用delims提取每一行在特定符号之前的内容;当设置delims为逗号(,)时,只显示每一行逗号之前内容;@echo offfor /f "delims=," %%i in (test.txt) do echo %%i pause如果识别切分的符号有多个,则可以直接继续在第一个后面写,例如:"delims=.,"此时会先判定是否有英文句号,如果没有则再判断有没有英文逗号。
批处理for循环命令之文件搜索,搜索磁盘文件。
批处理之for循环命令实现文件搜索For /r命令实现文件搜索批处理是windows系统中的一种脚本语言,由txt文件直接编写,扩展名为.cmd或.bat,虽然作为一种脚本,但是灵活使用其中的命令对我们还是很有用的。
批处理中的for /r命令能够实现本地文件的搜索功能,首先介绍一下for /r命令实现文件搜索的用法:For /r 路径%%i in (关键字) do 要做的事其中路径可以改为你自己要搜索的路径如C:\ 关键字则是你要搜索的文件名如qq.exe或上海滩.mp3 等等。
do 后面接的是你要计算机循环做的事情例如:搜索计算机上C盘所有文件并显示出来,代码如下:For /r C:\ %%i in (*) do echo %%i运行效果:结果将会列出C盘所有文件,因为通配符*代表一串字符,C盘所有文件名都与*匹配。
例如:我要计算机搜索上海滩.mp3 这首歌(假如在E盘的某个位置)并将其绝对路径显示出来,代码如下:For /r E:\ %%i in (上海滩.mp3) do echo %%i运行效果:难道你的电脑上有这么多上海滩.mp3 吗?其实不是如果我们将代码改成:For /r E:\ %%i in (上海滩.mp3) do if exist %%i echo %%i效果如何呢?运行效果如下:所以,当我们在利用for /r命令搜索文件时,请加上if exist %%i 判断文件存在时才执行我们要循环做的事情题目:搜索C盘里所有的mp3文件代码如下:For /r C:\ %%a in (*.mp3) do if exist %%a echo %%a其中%%后面的字母a可以用其他任意字母代替,如%%s 、%%g等等,但必须保证在一组for循环命令中%%后面的字母必须相同,不能前面用%%i ,后面用%%a,这样是错误的。
运行效果:如果只记得文件部分名称怎么办,如何搜索?例如我只记得一个MP3文件名中有一个“爱”字,这个文件不知道放在磁盘什么位置,于是代码如下:For /r C:\ %%a in (*爱*.mp3) do if exist %%a echo %%aFor /r D:\ %%a in (*爱*.mp3) do if exist %%a echo %%aFor /r E:\ %%a in (*爱*.mp3) do if exist %%a echo %%a根据你电脑有几个磁盘自行添加命令运行效果:结果将会列出所有带“爱”字的MP3文件因此当我们在设置关键字时需要灵活使用通配符*? *代表一串字符?代表一个字符,当设置的关键字最优时,能提高for /r命令帮我搜索文件的效率和准确率以下代码利用了for /r 、set、if、重定向>、变量延时等批处理命令并结合HTML 代码形成了一个完整的文件搜索脚本程序,利用以下代码可迅速的自定义搜索计算机上的文件,搜索过程中具有较好的直观性,搜索的结果保存成一份以searchresult.html为文件名的html文档并放入和此脚本程序相同的目录中,搜索结果一目了然,利用html代码还可以对搜索到的文件执行“打开文件夹”的操作,增加了方便性。
批处理 循环语句for
3.2.1 for循环语句《批处理入门手册》三.批处理高级语句篇-----------------------------------------------------------------------------------------------------3.2.1 学习for循环语句学习要点:一.前言二.for语句的基本用法三.for /f 用法详解-----------------------------------------------------------------------------------------------------此文原文名为《for语句从入门到精通》,原文地址:/thread-2189-1-1.html一、前言在批处理中,for是最为强大的命令语句,它的出现,使得解析文本内容、遍历文件路径、数值递增/递减等操作成为可能;配合if、call、goto等流程控制语句,更是可以实现脚本复杂的自动化、智能化操作;合理使用for语句,还能使代码大为简化,免除各位编写大量重复语句之苦。
而能否熟练使用for语句,已经成为衡量一个人批处理水平高低最主要的标准。
在这个系列教程中,我将通过实际应用中频繁出现的例子,带领大家步入for语句的神奇之门,一步步迈向for语句的魔幻殿堂,使得大家在实际的应用中,能独立写出简洁高效的代码,在批处理的世界里自由驰骋。
注意:以下的讲解,都是基于简体中文Windows XP Pro SP3的操作系统环境-----------------------------------------------------------------------------------------------------二、for语句的基本用法[2008.11.9更新]正如色彩缤纷的七彩光芒是由红绿蓝三原色构成的一样,最复杂的for语句,也有其基本形态,它的模样是这样的:在cmd窗口中:for %I in (command1) do command2在批处理文件中:for %%I in (command1) do command2之所以要区分cmd窗口和批处理文件两种环境,是因为在这两种环境下,命令语句表现出来的行为虽然基本一样,但是在细节上还是稍有不同,最明显的一个差异就是:在cmd窗口中,for之后的形式变量I 必须使用单百分号引用,即%I;而在批处理文件中,引用形式变量I必须使用双百分号,即%%I。
批处理命令——for
批处理命令——for【1】for命令简介 先把for循环与for命令类⽐⼀下,这样学习理解快。
for 循环语句,⼀般格式如下:1for (表达式1;表达式2;表达式3)2 {3循环体;4 } 1. 表达式1 ⼀般为初始状态赋值表达式,给控制变量赋初值。
2. 表达式2 ⼀般为关系表达式或逻辑表达式,为循环控制条件。
3. 表达式3 ⼀般为每次执⾏循环体后向控制变量重新赋值的表达式(给控制变量增量或减量)。
4. 语句:循环体,⼀般为复合语句(即可能需要执⾏多条语句)。
举个实例:1for (int i=0; i < 100; ++i)2 {3 cout << i << endl;4 } for 命令,⼀般格式如下: 在cmd窗⼝中使⽤格式:FOR %variable IN (set) DO command [command-parameters] 在批处理脚本中使⽤格式:FOR %%variable IN (set) DO command [command-parameters] 1. 在cmd窗⼝中使⽤,变量名必须⽤单%引⽤(即:%variable);在批处理脚本中使⽤,变量名必须⽤双%引⽤(即:%%variable)。
2. for、in和do是for命令的三个关键字,缺⼀不可。
3. 关键字in之后,do之前的括号不能省略。
举个实例:新建⼀个⽂本⽂件,命名为fordemo,修改⽂件类型为bat,⽤Notepad++打开编辑内容为:1@echo off2for %%i in (1 2 3 4 5) do@echo %%i3pause>nul 执⾏结果: 嗯哼,原来for命令就这么简单?嗨,同学,不要浮躁,保持冷静,更要理智。
下⾯,且看对上例语句的分析: 从命令组成结构由左向右剖析,除过关键字,依次分别为: 1. 变量名为i,i太简单,作为变量名不具备见名知意的特点。
批处理文件的循环语句
批处理文件的循环语句1. 批处理文件里的循环语句啊,就像是魔法咒语一样!它能让电脑按照你的想法一遍又一遍地干活儿呢。
比如说,我想把一个文件夹里所有的.txt文件都复制到另一个文件夹,就可以用for循环语句。
像这样:for %%i in (.txt) do copy %%i "目标文件夹路径",是不是超级方便?感觉就像有个小助手在帮我自动完成繁琐的工作。
2. 批处理文件的循环语句可不得了!这就好比是工厂里的传送带,一件接着一件地处理东西。
要是你想删除多个名字类似的文件,像那些以“temp_”开头的文件,那就可以用循环语句。
例如:for /f "delims=" %%a in ('dir temp_ /b') dodel %%a。
哇塞,就这么轻松搞定了,真让人兴奋不已!3. 批处理文件中的循环语句简直是救星般的存在!想象一下,你有一堆文件需要重命名,就像一群调皮的孩子都得换个新名字。
这时候循环语句就派上用场啦。
比如:for /l %%n in (1,1,10) do ren "旧文件名%%n.txt" "新文件名%%n.txt"。
是不是觉得自己像个超级指挥官,指挥着电脑乖乖听话呢?4. 批处理文件的循环语句太酷了吧!它就像是一个不知疲倦的小机器人,重复做着你吩咐的事情。
假如你要查看某个目录下每个子文件夹的大小,用循环语句就能轻松做到。
像这样:for /d %%i in () do dir /s /a "%%i" | find "文件总数"。
这就如同让小机器人挨个儿去探索每个小房间的大小一样有趣。
5. 批处理文件里的循环语句那可是个厉害角色!感觉就像拥有了一把万能钥匙,可以打开很多复杂操作的大门。
比如说你要统计多个文本文件里某一个单词出现的次数。
可以这样写循环语句:for %%f in (.txt) do find /c "那个单词" %%f。
批处理命令For循环命令详解
分类:2010-06-11 13:0416793人阅读0批处理for命令详解FOR这条命令基本上都被用来处理文本,但还有其他一些好用的功能看看他的基本格式这里我引用的是批处理中的格式,直接在命令行只需要一个%号FOR 参数%%变量名IN 相关文件或命令DO 执行的命令参数:FOR有4个参数/d /l /r /f 他们的作用我在下面用例子解释%%变量名:这个变量名可以是小写a-z或者大写A-Z,他们区分大小写,FOR会把每个读取到的值给他;IN:命令的格式,照写就是了;相关文件或命令:FOR要把什么东西读取然后赋值给变量,看下面的例子do:命令的格式,照写就是了执行的命令:对每个变量的值要执行什么操作就写在这.可以在CMD输入for /看系统提供的帮助对照一下FOR %%variable IN set DO command command-parameters%%variable 指定一个单一字母可替换的参数;set 指定一个或一组文件;可以使用通配符;command 指定对每个文件执行的命令;command-parameters为特定命令指定参数或命令行开关;现在开始讲每个参数的意思/d仅为目录如果Set 也就是我上面写的"相关文件或命令" 包含通配符和,将对与Set 相匹配的每个目录而不是指定目录中的文件组执行指定的Command;系统帮助的格式:FOR /D %%variable IN set DO command他主要用于目录搜索,不会搜索文件,看这样的例子echo offfor /d %%i in do echo %%ipause把他保存放在C盘根目录执行,就会把C盘目录下的全部目录名字打印出来,而文件名字一个也不显示在来一个,比如我们要把当前路径下文件夹的名字只有1-3个字母的打出来echo offfor /d %%i in do echo %%ipause这样的话如果你当前目录下有目录名字只有1-3个字母的,就会显示出来,没有就不显示了思考题目:echo offfor /d %%i in window do echo %%ipause保存到C盘下执行,会显示什么呢自己看吧/D参数只能显示当前目录下的目录名字,这个大家要注意/R递归进入根目录树Drive:Path,在树的每个目录中执行for 语句;如果在/R 后没有指定目录,则认为是当前目录;如果Set 只是一个句点 .,则只枚举目录树;系统帮助的格式:FOR /R drive:path %%variable IN set DO command上面我们知道,/D只能显示当前路径下的目录名字,那么现在这个/R也是和目录有关,他能干嘛呢放心他比/D强大多了他可以把当前或者你指定路径下的文件名字全部读取,注意是文件名字,有什么用看例子echo offfor /r c:/ %%i in .exe do echo %%ipause咋们把这个BAT保存到D盘随便哪里然后执行,我会就会看到,他把C盘根目录,和每个目录的子目录下面全部的EXE文件都列出来了,这里的c:/就是目录了;再来一个echo offfor /r %%i in .exe do echo %%ipause参数不一样了,这个命令前面没加那个C:/也就是搜索路径,这样他就会以当前目录为搜索路径,比如你这个BAT你把他防灾d:/test目录下执行,那么他就会把D:/test目录和他下面的子目录的全部EXE文件列出来/L迭代数值范围使用迭代变量设置起始值Start,然后逐步执行一组范围的值,直到该值超过所设置的终止值End;/L 将通过对Start 与End 进行比较来执行迭代变量;如果Start 小于End,就会执行该命令;如果迭代变量超过End,则命令解释程序退出此循环;还可以使用负的Step 以递减数值的方式逐步执行此范围内的值;例如,1,1,5 生成序列1 2 3 4 5,而5,-1,1 则生成序列5 4 3 2 1;语法是:系统帮助的格式:for /L %% Variable in Start,Step,End do Command例如:echo offfor /l %%i in 1,1,5 do echo %%ipause保存执行看效果,他会打印从1 2 3 4 5 这样5个数字1,1,5这个参数也就是表示从1开始每次加1直到5终止再看这个例子echo offfor /l %%i in 1,1,5 do start cmdpause执行后是不是吓了一跳,怎么多了5个CMD窗口,呵呵如果把那个1,1,5改成1,1,65535会有什么结果,我先告诉大家,会打开65535个CMD窗口....这么多你不死机算你强当然我们也可以把那个start cmd改成md %%i 这样就会建立指定个目录了名字为1-65535 看完这个被我赋予破坏性质的参数后,我们来看最后一个参数/f含有/F的for详细说明含有/F的for有很大的用处,在批处理中使用的最多,用法如下:格式:FOR /F "options" %%i IN file DO commandFOR /F "options" %%i IN "string" DO commandFOR /F "options" %%i IN 'command' DO command这个可能是最常用的,也是最强的命令,主要用来处理文件和一些命令的输出结果;file代表一个或多个文件string 代表字符串command代表命令"options" 可选对于FOR /F %%i IN file DO commandfile为文件名,按照官方的说法是,for会依次将file中的文件打开,并且在进行到下一个文件之前将每个文件读取到内存,按照每一行分成一个一个的元素,忽略空白的行,看个例子;假如文件中有如下内容:第1行第1列第1行第2列第1行第3列第2行第1列第2行第2列第2行第3列第3行第1列第3行第2列第3行第3列你想显示中的内容,会用什么命令呢当然是type,typefor也可以完成同样的命令:for /f %%i in do echo %%i还是先从括号执行,因为含有参数/f,所以for会先打开,然后读出里面的所有内容,把它作为一个集合,并且以每一行作为一个元素,所以会产生这样的集合,{“第1行第1列第1行第2列第1行第3列”, 1行第1列第1行第2列第1行第3列.第2行第1列第2行第2列第2行第3列第3行第1列第3行第2列第3行第3列执行for /f "eol=. tokens=" %%i in do echo %%i结果是:第3行第1列第3行第2列第3行第3列用eol来告诉for忽略以“.”开头的行;同样也必须加tokens=,否则只会显示“第3行第1列======================================================终极dos批处理循环命令详解格式:FOR 参数%%变量名IN 相关文件或命令DO 执行的命令作用:对一个或一组文件,字符串或命令结果中的每一个对象执行特定命令,达到我们想要的结果;注意:在批处理文件中使用FOR 命令时,指定变量请使用%%variable,而不要用%variable;变量名称是区分大小写的,所以%i 不同于%I.关于:for命令可以带参数或不带参数,带参数时支持以下参数:/d /l /r /f下面分别解释一下===零:无参数时:---FOR %variable IN set DO command command-parameters%variable 指定一个单一字母可替换的参数;set 指定一个或一组文件;可以使用通配符;command 指定对每个文件执行的命令;command-parameters为特定命令指定参数或命令行开关;TTT示例:for %%i in t. do echo %%i --显示当前目录下与t.相匹配的文件只显示文件名,不显示路径for %%i in d:/mydocuments/.doc do echo %%i --显示d:/mydocuments/目录下与.doc 相匹配的文件===一、参数/d 参数只能显示当前目录下的目录名字格式:FOR /D %variable IN set DO command command-parameters这个参数主要用于目录搜索,不会搜索文件,/D 参数只能显示当前目录下的目录名字;TTT特别说明:只会搜索指定目录下的目录,不会搜索再下一级的目录;TTT示例:for /d %%i in c:/ do echo %%i --显示c盘根目录下的所有目录for /d %%i in do echo %%i --显示当前目录下名字只有1-3个字母的目录===二、参数/R 搜索指定路径及所有子目录中与set相符合的所有文件---格式:FOR /R drive:path %variable IN set DO command command-parameters此命令会搜索指定路径及所有子目录中与set相符合的所有文件,注意是指定路径及所有子目录;1、set中的文件名如果含有通配符或,则列举/R参数指定的目录及其下面的所用子目录中与set相符合的所有文件,无相符文件的目录则不列举;2、如果set中为具体文件名,不含通配符,则枚举该目录树即列举该目录及其下面的所有子目录并在后面加上具体的文件名,而不管set中的指定文件是否存在;例:for /r c:/ %%i in .exe do echo %%i --把C盘根目录,和每个目录的子目录下面全部的EXE文件都列出来了TTT示例:for /r c:/ %%i in do echo %%i --枚举了c盘所有目录for /r d:/backup %%i in 1 do echo %%i --枚举d/backup目录for /r c:/ %%i in do if exist %%i echo %%i --很好的搜索命令,列举存在的目录三、参数/L 该集表示以增量形式从开始到结束的一个数字序列;可以使用负的Step---格式:FOR /L %variable IN start,step,end DO command command-parameters该集表示以增量形式从开始到结束的一个数字序列;可以使用负的StepTTT示例:for /l %%i in 1,1,5 do echo %%i --输出1 2 3 4 5for /l %%i in 1,2,10 do echo %%i --输出1,3,5,7,9for /l %%i in 100,-20,1 do echo %%i --输出100,80,60,40,20for /l %%i in 1,1,5 do start cmd --打开5个CMD窗口for /l %%i in 1,1,5 do md %%i --建立从1~5共5个文件夹for /l %%i in 1,1,5 do rd /q %%i --删除从1~5共5个文件夹四、参数/F 使用文件解析来处理命令输出、字符串及文件内容;---这个参数是最难的,参数又多,先简单的解释一下:for命令带这个参数可以分析文件内容,字符串内容或某一命令输出的结果,并通过设置option得我们想要的结果;以下是某高手的解释,感觉有点太专业了,自认为不太容易理解,也列一下:迭代及文件解析--使用文件解析来处理命令输出、字符串及文件内容;使用迭代变量定义要检查的内容或字符串,并使用各种options选项进一步修改解析方式;使用options令牌选项指定哪些令牌应该作为迭代变量传递;请注意:在没有使用令牌选项时,/F 将只检查第一个令牌;文件解析过程包括读取输出、字符串或文件内容,将其分成独立的文本行以及再将每行解析成零个或更多个令牌;然后通过设置为令牌的迭代变量值,调用for 循环;默认情况下,/F 传递每个文件每一行的第一个空白分隔符号;跳过空行;+++格式:FOR /F "options" %variable IN file-set DO command command-parametersFOR /F "options" %variable IN "string" DO command command-parametersFOR /F "options" %variable IN 'command' DO command command-parameters或者,如果有usebackq 选项:FOR /F "options" %variable IN file-set DO command command-parametersFOR /F "options" %variable IN "string" DO command command-parametersFOR /F "options" %variable IN 'command' DO command command-parametersTTT说明:以上是WinXP系统中的帮助内容,你可以注意到,两者完全相同,这其实是系统的错误,第二段“如果有usebackq 选项:”应该以下的内容:FOR /F "options" %variable IN "file-set" DO command command-parametersFOR /F "options" %variable IN 'string' DO command command-parametersFOR /F "options" %variable IN `command` DO command command-parameters--`command`中的引号为反引号,是键盘上数字1左面的那个键+++TTT说明:下面是详细的解释,大部分是系统中的帮助内容,也有些错误怪不得for命令这么难学,已经被我纠正了;1 OPTION关键字详解:eol=c:指一个行注释字符的结尾就一个;例如:eol=; --忽略以分号打头的那些行;skip=n:指在文件开始时忽略的行数;例如:skip=2 --忽略2行;delims=xxx:指分隔符集;这个替换了空格和跳格键的默认分隔符集;例如:delims=, --指定用逗号,空格对字符串进行分隔;tokens=x,y,m-n:指每行的哪一个符号被传递到每个迭代的for 本身;这会导致额外变量名称的分配;m-n格式为一个范围;通过nth 符号指定mth;如果符号字符串中的最后一个字符是星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本;例如:tokens=2,3 --将每行中的第二个和第三个符号传递给for 程序体;tokens=2,3 ... i% --将会把取到的第二个字符串赋给i%,第三个赋给j%,剩下的赋给k%;关于usebackq,不同版本的系统提示不同的帮助,不过都有助于理解,所以都摘抄如下:1,usebackq:使用后引号键盘上数字1左面的那个键`;未使用参数usebackq时:file-set 表示文件,不能加引号,所以不能含有空格;加双引号表示字符串,即"string";加单引号表示执行命令,即'command';使用参数usebackq时:file-set和"file-set"都表示文件,当文件路径或名称中有空格时,就可以用双引号括起来;单引号表示字符串,即'string';后引号表示命令执行,即`command`;此段是WinXP系统中的帮助2,usebackq:指定新语法已在下类情况中使用:在作为命令执行一个后引号的字符串;并且一个单引号字符为文字字符串命令;并允许在filenameset中使用双引号扩起文件名称;以上两条结合着看,其实已经可以明白了,我再说明一下:其实这个参数的目的就是为了处理带有空格的文件名;如果您要处理的文件名和路径中含有空格,如果直接使用,会提示找不到文件;如果你用双引号将文件名和路径括起来;这时候将作为字符串处理,而不是作为文件了;为了应对这种情况,所以才增加了这个“usebackq”参数;如果使用了这个参数,对于括号中的加双引号的集合,系统就可以认为是文件了;真正的字符串要加单引号;命令要加反引号;2 file-set 为一个或多个文件名;继续到file-set 中的下一个文件之前,每份文件都已被打开、读取并经过处理;处理包括读取文件,将其分成一行行的文字,然后将每行解析成零或更多的符号;然后用已找到的符号字符串变量值调用For 循环;以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号;跳过空白行;您可通过指定可选"options"参数替代默认解析操作;这个带引号的字符串包括一个或多个指定不同解析选项的关键字;3 %i:专门在for 语句中得到说明,%j 和%k 是通过tokens= 选项专门得到说明的;您可以通过tokens= 一行指定最多26 个符号,只要不试图说明一个高于字母'z' 或'Z' 的变量;请记住,FOR 变量是单一字母、分大小写和全局的;而且,同时不能有52 个以上都在使用中;TTT补充说明:一般在tokens后只指定第一个参数,如%%i或%%a,在后面使用第二个及两个以上的参数,自动按顺序往下排即可;如前面指定的是%%a,后面则用%%b代表第二个结果,%%c代表第三个结果;;;测试了一下tokens后指定多个变量名,没有测试成功,应该是不可以的;所以token后只能跟要使用的第一个变量名如果使用的变量名超过了%z或%Z,就无法使用了,曾经以为会循环过来:如%%z后可以使用%%a或%%A,但经测试,这是不可以的;如:for /f "tokens=1,2,3 delims=-, " %%y in "aa bb,cc-dd ee" doecho %%y %%z %%A %%a --只会输出前两个字符串,后面的两个变量是无效的;+++以下是系统提供的范例:FOR /F "eol=; tokens=2,3 delims=, " %i in do echo %i %j %k --说明:会分析中的每一行,eol=; --忽略以分号打头的那些行;tokens=2,3 --将每行中的第二个和第三个符号传递给for 程序体;delims= , --用逗号和/或空格定界符号;%i --这个for 程序体的语句引用%i 来取得取得的首个字符串本例中为第二个符号,引用%j 来取得第二个字符串本例中为第三个符号引用%k来取得第三个符号后的所有剩余符号;TTT说明:上述例子和说明中明显的错误,%i应该换为%%i帮助中有明确的说明:指定变量请使用%%variable,而不要用%variable,误导+++TTT:下面列我做的几个例子:1,分析文件的例子FOR /F "eol=; tokens=1,2 delims=,- " %%i in d:/ do echo %%i %%j %%k2,分析字符串的例子:for /f "tokens=1,2,3 delims=-, " %%i in "aa bb,cc-dd ee" do echo %%i %%j %%k %%l 3,分析命令输出的例子:FOR /F "tokens=1 delims==" %%i IN 'set' DO echo %%i----%%j如果使用了usebackq参数后,命令如下,结果与上面的完全相同;1,分析文件的例子FOR /F "usebackq eol=; tokens=1,2 delims=,- " %%i in "d:/" do echo %%i %%j %%k 2,分析字符串的例子:for /f "usebackq tokens=1,2,3 delims=-, " %%i in 'aa bb,cc-dd ee' doecho %%i %%j %%k %%l3,分析命令输出的例子:会枚举当前环境中的环境变量名称和值;FOR /F "usebackq tokens=1 delims==" %%i IN `set` DO echo %%i----%%j结果大家可以试一下,很容易就明白的;===FOR命令中的变量---FOR 变量参照的替换已被增强;您现在可以使用下列选项语法:~I - 删除任何引号",扩充%I%~fI - 将%I 扩充到一个完全合格的路径名%~dI - 仅将%I 扩充到一个驱动器号%~pI - 仅将%I 扩充到一个路径%~nI - 仅将%I 扩充到一个文件名%~xI - 仅将%I 扩充到一个文件扩展名%~sI - 扩充的路径只含有短名%~aI - 将%I 扩充到文件的文件属性%~tI - 将%I 扩充到文件的日期/时间%~zI - 将%I 扩充到文件的大小%~$PATH:I - 查找列在路径环境变量的目录TTT提示:是环境变量path的目录,并将%I 扩充到找到的第一个完全合格的名称;如果环境变量名未被定义,或者没有找到文件,此组合键会扩充到空字符串此外,还可以组合修饰符来得到多重结果:%~dpI - 仅将%I 扩充到一个驱动器号和路径%~nxI - 仅将%I 扩充到一个文件名和扩展名%~fsI - 仅将%I 扩充到一个带有短名的完整路径名%~dp$PATH:i - 查找列在路径环境变量的目录,并将%I 扩充到找到的第一个驱动器号和路径;%~ftzaI - 将%I 扩充到类似输出线路的DIR在以上例子中,%I 和PATH 可用其他有效数值代替;%~ 语法用一个有效的FOR 变量名终止;选取类似%I 的大写变量名比较易读,而且避免与不分大小写的组合键混淆;以上是系统帮助的内容我们可以看到每行都有一个大写字母"I",这个I其实就是我们在FOR带入的变量,例如:FOR /F "usebackq eol=; tokens=1,2 delims=,- " %%x in "d:/" doecho %%x %%y %%z这里我们就要把那个x,y,z改成%~fx,%~fy,%~fz;+++TTT特例:以下是我根据以上说明作的一个综合的例子,可以直接复制到记事本里,保存为bat格式c盘下任一目录,运行后,可以直观的看到扩展后的效果;echo offecho ---显示"dir c:/ /b /ah"for /f "delims==" %%i in 'dir c:/ /b /ah' do echo 不扩展变量%%ifor /f "delims==" %%i in 'dir c:/ /b /ah' do echo 扩展变量到~fI %%~fi --扩充到一个完全合格的路径名for /f "delims==" %%i in 'dir c:/ /b /ah' do echo 扩展变量到~dI %%~di --仅将变量扩充到一个驱动器号for /f "delims==" %%i in 'dir c:/ /b /ah' do echo 扩展变量到~pI %%~pi --仅将变量扩充到一个路径for /f "delims==" %%i in 'dir c:/ /b /ah' do echo 扩展变量到~nI %%~ni --仅将变量扩充到一个文件名for /f "delims==" %%i in 'dir c:/ /b /ah' do echo 扩展变量到~xI %%~xi --仅将变量扩充到一个文件扩展名for /f "delims==" %%i in 'dir c:/ /b /ah' do echo 扩展变量到~sI %%~si --扩充的路径只含有短名for /f "delims==" %%i in 'dir c:/ /b /ah' do echo 扩展变量到~aI %%~ai --将变量扩充到文件的文件属性for /f "delims==" %%i in 'dir c:/ /b /ah' do echo 扩展变量到~tI %%~ti --将变量扩充到文件的日期/时间for /f "delims==" %%i in 'dir c:/ /b /ah' do echo 扩展变量到~zI %%~zi --将变量扩充到文件的大小for /f "delims==" %%i in 'dir c:/ /b /ah' do echo 扩展变量到~$PATH:I %%~$PATH:i --查找列在路径环境变量的目录,并将变量扩充到找到的第一个完全合格的名称echo ---以下显示组合修饰符来得到多重结果---:for /f "delims==" %%i in 'dir c:/ /b /ah' do echo 扩展变量到~dpI %%~dpi --仅将变量扩充到一个驱动器号和路径for /f "delims==" %%i in 'dir c:/ /b /ah' do echo 扩展变量到~nxI %%~nxi --仅将变量扩充到一个文件名和扩展名for /f "delims==" %%i in 'dir c:/ /b /ah' do echo 扩展变量到~fsI %%~fsI --仅将变量扩充到一个带有短名的完整路径名for /f "delims==" %%i in 'dir c:/ /b /ah' do echo 扩展变量到~dp$PATH:I %%~dp$PATH:i --查找列在路径环境变量的目录,并将变量扩充到找到的第一个驱动器号和路径for /f "delims==" %%i in 'dir c:/ /b /ah' do echo 扩展变量到~ftzaI %%~ftzai --将变量扩充到类似输出线路的DIRecho.echo ---显示"dir C:/WINDOWS/system32/ /b"for /f "delims==" %%i in 'dir C:/WINDOWS/system32/ /b' do echo 不扩展变量%%ifor /f "delims==" %%i in 'dir C:/WINDOWS/system32/ /b' do echo 扩展变量到~fI %%~fi --扩充到一个完全合格的路径名for /f "delims==" %%i in 'dir C:/WINDOWS/system32/ /b' do echo 扩展变量到~dI %%~di --仅将变量扩充到一个驱动器号for /f "delims==" %%i in 'dir C:/WINDOWS/system32/ /b' do echo 扩展变量到~pI %%~pi --仅将变量扩充到一个路径for /f "delims==" %%i in 'dir C:/WINDOWS/system32/ /b' do echo 扩展变量到~nI %%~ni --仅将变量扩充到一个文件名for /f "delims==" %%i in 'dir C:/WINDOWS/system32/ /b' do echo 扩展变量到~xI %%~xi --仅将变量扩充到一个文件扩展名for /f "delims==" %%i in 'dir C:/WINDOWS/system32/ /b' do echo 扩展变量到~sI %%~si --扩充的路径只含有短名for /f "delims==" %%i in 'dir C:/WINDOWS/system32/ /b' do echo 扩展变量到~aI %%~ai --将变量扩充到文件的文件属性for /f "delims==" %%i in 'dir C:/WINDOWS/system32/ /b' do echo 扩展变量到~tI %%~ti --将变量扩充到文件的日期/时间for /f "delims==" %%i in 'dir C:/WINDOWS/system32/ /b' do echo 扩展变量到~zI %%~zi --将变量扩充到文件的大小for /f "delims==" %%i in 'dir C:/WINDOWS/system32/ /b' do echo 扩展变量到~$PATH:I %%~$PATH:i --查找列在路径环境变量的目录,并将变量扩充到找到的第一个完全合格的名称echo ---以下显示组合修饰符来得到多重结果---:for /f "delims==" %%i in 'dir C:/WINDOWS/system32/ /b' do echo 扩展变量到~dpI %%~dpi --仅将变量扩充到一个驱动器号和路径for /f "delims==" %%i in 'dir C:/WINDOWS/system32/ /b' do echo 扩展变量到~nxI %%~nxi --仅将变量扩充到一个文件名和扩展名for /f "delims==" %%i in 'dir C:/WINDOWS/system32/ /b' do echo 扩展变量到~fsI %%~fsI --仅将变量扩充到一个带有短名的完整路径名for /f "delims==" %%i in 'dir C:/WINDOWS/system32/ /b' do echo 扩展变量到~dp$PATH:I %%~dp$PATH:i --查找列在路径环境变量的目录,并将变量扩充到找到的第一个驱动器号和路径for /f "delims==" %%i in 'dir C:/WINDOWS/system32/ /b' do echo 扩展变量到~ftzaI %%~ftzai --将变量扩充到类似输出线路的DIRTTT说明:1,以上命令中,%%~fsI无法显示,估计是系统错误,因为%%~fI是扩充到一个完全合格的路径名,%%~sI只含有短文件名,本身是相互矛盾的,所以出错;不知是系统的错误还是在考我们~~2,以上命令如果保存在别的盘中,无法显示正确的驱动器和路径;3,如果想要%%~dp$PATH:i正常显示,要保证环境变量path中确实有这个路径:C:/WINDOWS/system32;下面依次说明一下:+++一、~I - 删除任何引号",扩展%I---这个变量的作用就如他的说明,删除引号删除引号规则如下BAT兄补充:1、若字符串首尾同时存在引号,则删除首尾的引号;2、若字符串尾不存在引号,则删除字符串首的引号;3、如果字符串中间存在引号,或者只在尾部存在引号,则不删除;龙卷风补充:无头不删,有头连尾删;我们来看这个例子,首先建立临时文件,内容如下"1111"2222"3333""55"55"55也可建立个BAT文件代码如下:echo offecho ^"1111>echo "2222">>echo 3333^">>echo "4444"44>>echo ^"55"55"55>>rem 上面建立临时文件,注意不成对的引号要加转义字符^,重定向符号前不要留空格FOR /F "delims=" %%i IN DO echo %%~ipausedel执行后,我们看CMD的回显如下:1111 字符串前的引号被删除了2222 字符串首尾的引号都被删除了3333" 字符串前无引号,后面的引号保留4444"44 字符串前面的引号删除了,而中间的引号保留55"55"55 字符串前面的引号删除了,而中间的引号保留请按任意键继续. . .结果和之前中的内容对比一下,我们会发现第1、2、5行的引号都消失了,这就是删除引号~i的作用了+++二、%~fI - 将%I 扩展到一个完全合格的路径名示例:把代码保存放在随便哪个地方,我这里就放桌面吧.FOR /F "delims==" %%i IN 'dir /b' DO echo %%~fipause执行后显示内容如下C:/Documents and Settings/Administrator/桌面/C:/Documents and Settings/Administrator/桌面/当我把代码中的%%~fi直接改成%%iFOR /F "delims==" %%i IN 'dir /b' DO echo %%ipause执行后就会显示以下内容:通过对比,我们很容易就看出没有路径了,这就是"将%I 扩展到一个完全合格的路径名"的作用,也就是如果%i变量的内容是一个文件名的话,他就会把这个文件所在的绝对路径打印出来,而不只单单打印一个文件名,自己动手动实验下就知道了+++三、%~dI - 仅将%I 扩展到一个驱动器号看例子:代码如下,我还是放到桌面执行FOR /F "delims==" %%i IN 'dir /b' DO echo %%~dipause执行后我CMD里显示如下C:C:我桌面就两个文件,,%%~di作用是,如果变量%%i的内容是一个文件或者目录名,他就会把他这文件或者目录所在的盘符号打印出来+++四、%~pI - 仅将%I 扩展到一个路径这个用法和上面一样,他只打印路径不打印文件名字FOR /F "delims==" %%i IN 'dir /b' DO echo %%~pipause我就不打结果了,大家自己复制代码看结果吧,下面几个都是这么个用法,代码给出来,大家自己看结果吧+++五、%~nI - 仅将%I 扩展到一个文件名只打印文件名字FOR /F "delims==" %%i IN 'dir /b' DO echo %%~nipause+++六、%~xI - 仅将%I 扩展到一个文件扩展名只打印文件的扩展名FOR /F "delims==" %%i IN 'dir /b' DO echo %%~xi pause+++七、%~sI - 扩展的路径只含有短名打印绝对短文件名FOR /F "delims==" %%i IN 'dir /b' DO echo %%~si pause+++八、%~aI - 将%I 扩展到文件的文件属性打印文件的属性FOR /F "delims==" %%i IN 'dir /b' DO echo %%~ai pause+++九、%~tI - 将%I 扩展到文件的日期/时间打印文件建立的日期FOR /F "delims==" %%i IN 'dir /b' DO echo %%~ti pause+++十、%~zI - 将%I 扩展到文件的大小打印文件的大小FOR /F "delims==" %%i IN 'dir /b' DO echo %%~zipause龙卷风补充:上面例子中的"delims=="可以改为"delims=",即不要分隔符+++十一、%~$PATH:I - 查找列在路径环境变量的目录,并将%I 扩展到找到的第一个完全合格的名称;如果环境变量名未被定义,或者没有找到文件,此组合键会扩展到空字符串这是最后一个,和上面那些都不一样,我单独说说然后在把这些代码保存为批处理,放在桌面;echo offFOR /F "delims=" %%i IN “” DO echo %%~$PATH:ipause龙卷风补充:上面代码显示结果为C:/WINDOWS/system32/他的意思就在PATH变量里指定的路径里搜索文件,如果有则会把他所在绝对路径打印出来,没有就打印一个错误TTT说明,保存到桌面上,运行显示结果为:系统找不到文件“”;查看环境变量path中确实有这个路径,不明原因后来发现了,原来是中文引号的原因;上面的命令应该写成:FOR /F "delims=" %%i IN "" DO echo %%~$PATH:i最后发一个用批处理做一五子棋游戏:echo off&setlocal enabledelayedexpansion。
for批处理语法
for批处理语法FOR的语法FOR是一个循环命令。
所谓的循环指,对一组文件逐一运行一条命令,或对一组文件中的每一个文件执行某个特定命令。
FOR常用于循环命令、遍历查询、解析文本等。
1、FOR的基本语法格式:FOR /参数 %%I IN (Command1) DO Command2FOR /参数 %%字母 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。
批处理学习:for语句详解【经典】
批处理学习:for语句详解【经典】大纲一前言二 for语句的基本用法三 for /f (delims、tokens、skip、eol、userbackq、变量延迟)四 for /r (递归遍历)五 for /d (遍历目录)六 for /l (计数循环)一、前言在批处理中,for是最为强大的命令语句,它的出现,使得解析文本内容、遍历文件路径、数值递增/递减等操作成为可能;配合if、call、goto等流程控制语句,更是可以实现脚本复杂的自动化、智能化操作;合理使用for语句,还能使代码大为简化,免除各位编写大量重复语句之苦。
而能否熟练使用for语句,已经成为衡量一个人批处理水平高低最主要的标准。
在这个系列教程中,我将通过实际应用中频繁出现的例子,带领大家步入for语句的神奇之门,一步步迈向for语句的魔幻殿堂,使得大家在实际的应用中,能独立写出简洁高效的代码,在批处理的世界里自由驰骋。
注意:以下的讲解,都是基于简体中文版Windows XP Pro SP3的操作系统环境。
二、for语句的基本用法正如色彩缤纷的七彩光芒是由红绿蓝三原色构成的一样,最复杂的for语句,也有其基本形态,它的模样是这样的:在cmd窗口中:FOR %variable IN (set) DO command [command-parameters] 在批处理文件中:FOR %%variable IN (set) DO command [command-parameters]具体例子:For %i in (1 2 3) do @echo %i之所以要区分cmd窗口和批处理文件两种环境,是因为在这两种环境下,命令语句表现出来的行为虽然基本一样,但是在细节上还是稍有不同。
最明显的一个差异就是:在cmd窗口中,for之后的形式变量I必须使用单百分号引用,即%i;而在批处理文件中,引用形式变量i必须使用双百分号,即%%i。
为了方便起见,若不是特别强调,以下的讲解都以批处理文件环境为例。
批处理命令行for语句
for语句可以在命令行提示符中使用,也可以在批处理文件中使用。
这两种情况下唯一的区别是%和%%,参加下文说明。
一、for语句的格式:for [参数] 变量in (集合) do 命令[命令的参数]二、for语句的作用:对集合内的元素逐一执行后面的命令。
1、如:for %%i in (你好) do echo %%i将在屏幕上显示“你好”2个字。
这里集合是“你好”,执行的命令是“echo”。
由于集合中只有1个元素,因此循环只运行一次。
如果改成for %%i in (你好朋友) do echo %%i将会显示2行文字,第一行为“你好”,第二行为“朋友”。
因为2个词之间有空格,因此集合中就有了2个元素,循环将运行2次。
2、注意:以上for语句的运行方式是新建一个批处理文件,即扩展名为“.bat”的文件,内容为上面的命令,然后运行。
为了批处理执行完不退出,可在最后加上一条pause>null命令,这样能看到执行的结果。
要想通过cmd命令行执行的话,必须将%%换成%,即去掉一个%,如下:for %i in (你好) do echo %i3、以下所有例子都是这样,若要在命令行提示符下执行,请将所有的%%改成一个%。
三、for语句详细说明:上面语句格式中有的加了中括号[],表示这个语句元素不是必须的,只在需要时使用。
像刚才显示“你好”的命令中就没有使用[参数]这个语句元素。
所有语句元素间用空格隔开。
各语句元素的写法:for、in、do这3个符号是固定不变的1、[参数]的种类:只有4种,分别是/d、/r、/l、/f(即目录Directory、递归recursion、序列list、文件file),他们用于对后面的集合的含义做出解释,请与下面的集合解释结合来看。
这4个参数不区分大小写,可以联合使用,即一条for语句可以出现多个参数。
2、变量:除10个数字外(0-9)的所有符号(因为0-9往往作为形参使用,为了与此区别),变量名一般用单个字母表示即可,而且变量名区分大小写,即A和a是两个不同的变量。
For循环语句详解
Hello bat - DOS BAT批处理编程入门教程(一)介绍:DOS批处理真的是太古老了,伴随着DOS的诞生、成长,一直活跃在微软的操作系统中,曾经经历过完全依赖DOS的年代的朋友们一定不会忘记AUTOEXEC.BAT这个著名的批处理,即使是用Windows的今天,批处理也仍旧能帮我们做很多事情,继续发挥着余热。
本文以程序员的角度介绍BAT的使用,供大家参考,共同学习。
正文:DOS批处理真的是太古老了,伴随着DOS的诞生、成长,一直活跃在微软的操作系统中,曾经经历过完全依赖DOS的年代的朋友们一定不会忘记AUTOEXEC.BAT这个著名的批处理,即使是用Windows的今天,批处理也仍旧能帮我们做很多事情,继续发挥着余热。
本文以程序员的角度介绍BAT的使用,供大家参考,共同学习。
一、创建批处理的方法(1)用记事本打开记事本,输入DOS命令,保存的时候在保存类型处选择“所有文件”,文件名处填写批处理名称,例如demo.bat。
(2)利用copy con 命令运行命令行(cmd或command),输入copy con demo.bat ,输入DOS命令,按Ctrl + Z完成保存并退出。
二、我的第一个BAT程序DOS批处理真的是太古老了,伴随着DOS的诞生、成长,一直活跃在微软的操作系统中,曾经经历过完全依赖DOS的年代的朋友们一定不会忘记AUTOEXEC.BAT这个著名的批处理,即使是用Windows的今天,批处理也仍旧能帮我们做很多事情,继续发挥着余热。
本文以程序员的角度介绍BAT的使用,供大家参考,共同学习。
一、创建批处理的方法(1)用记事本打开记事本,输入DOS命令,保存的时候在保存类型处选择“所有文件”,文件名处填写批处理名称,例如demo.bat。
(2)利用copy con 命令运行命令行(cmd或command),输入copy con demo.bat ,输入DOS命令,按Ctrl + Z完成保存并退出。
批处理for命令详解
注:for命令下的查找文件功能,默认不显示隐藏文件。
练习:用for语句建立test1.txt、test2.txt和test3.txt三个文本文件。
@echo off
for %%i in (nul) do type %%i>test1.txt&type %%i>test2.txt&type %%i>test3.txt
拆分
dir /s /b /l /aa /od f:\*exe >1.txt
find /c "exe" 1.txt
dir /s /b /l /aa-s-h-r /on d:\*mp3|find /c "mp3"
==============================================
显示文本我们常常会想到以下命令 type more sort find findstr 等命令,不过这里for也可以的哦。
使用
@echo off
for /f %%i in (1.txt) do echo %%i
pause
逐行分析文本文件的内容。
便是 for /f 最为强大的一个功能。
for /f %%i in (filenames) do echo %%i
for /f %%i in ('command') do echo %%i
for /f %%i in ("string) dor echo %%i
查找f盘共有多少个exe文件
dir /s /b /l /aa /od f:\*exe|find /c "exe"
重要提示
批处理之FOR语法(精)
第一节FOR的语法恭喜你捡到了一本批处理秘籍《FOR入门与精通》!本秘籍为做到“一看就懂,一学就会”有些地方反复讲解和举证,如觉得啰嗦请直接跳过。
考虑到FOR的参数比较复杂,也是重点,所以放到了最后。
如对第二、三节的内容早已了解请直接跳过。
如有其他疑问欢迎访问本人博客:/cjiabing。
下面我们开始FOR的神奇之旅……一、概述欢迎进入FOR的神奇世界!FOR就像魔法师手里的魔法棒,武士手里的剑。
或许这样形容更好,批处理命令相当于法术师的魔咒,而FOR就是一句最厉害的的魔法咒语。
电影里的道士驱魔的时候,总要念一些经咒,好比“阿弥阿弥哄”,FOR就是这个“阿弥阿弥哄”。
实在不行你就当它是阿里巴巴的“芝麻开门”算了,当你在一个批处理里使用FOR命令时,它就能帮你打开一个命令开关,从而帮你打开一个神奇的批处理世界。
课前思考题:李四送喝醉了的张三回家,张三家门锁着,没人在家。
李四从张三口袋里掏出一串钥匙,他不知道哪个钥匙能开门,你说他该怎么办?二、FOR的语法FOR是一个循环命令。
所谓的循环指,对一组文件逐一运行一条命令,或对一组文件中的每一个文件执行某个特定命令。
FOR常用于循环命令、遍历查询、解析文本等。
1、FOR的基本语法格式:FOR /参数%%I IN (Command1) DO Command2FOR /参数%%字母IN (集合) DO 命令[命令参数]FOR /参数%%Variable IN (Set) DO Command[Command-Parameters](注意:这三条命令的语法格式都一致,只是表示方式不同而已。
一般情况下,本教程采用第一条表达,采用第二条讲解,采用第三条补充。
)2、用法:一句话总结:从集合中依次逐一提取变量执行后面的命令。
FOR—IN—DO这是FOR命令的基本结构,三个基本组成部分缺一不可。
FOR:负责打开循环命令开关。
IN负责从集合中抽取元素替换变量。
它后面的括号不能省略。
DOS批处理命令:for循环详细说明及例子
DOS批处理命令:for循环详细说明及例子详细说明及例子:对一组文件中的每一个文件执行某个特定命令普通格式:FOR %variable IN (set) DO command [command-parameters] •%variable 指定一个单一字母可替换的参数。
•(set) 指定一个或一组文件。
可以使用通配符。
•command 指定对每个文件执行的命令。
•command-parameters 为特定命令指定参数或命令行开关。
在批处理程序中使用 FOR 命令时,指定变量请使用 %%variable 而不要用 %variable。
变量名称是区分大小写的,所以 %i 不同于 %I.范例:如c:/temp/myfile.txt内容如下,共4行•;a1,a2,a3,a4,a5•b1,b2,b3,b4,b5•c1 c2 c3 c4 c5•d1,d2,d3,d4,d5例:for %i in (my*) do @echo %i 结果:myfile.txt (显示文件名)扩展格式:FOR /D %variable IN (set) DO command [command-parameters]如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配(只搜索指定目录下的目录,不再搜索指定目录下的目录的子目录,不搜索文件名)。
例:for /d %i in (*) do @echo %i 结果:是当前目录下的目录FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句。
如果在 /R 后没有指定目录规范,则使用当前目录。
如果集仅为一个单点(.)字符,则枚举该目录树。
例:for /r %i in (*.txt) do @echo %i 列举当前目录下的所有txt 文件:不指定目录即为当前目录例:for /r . %i in (.) do @echo %i 列举当前目录下的所有目录,含子目录:例:for /r . %i in (5.txt) do @echo %i 列举当前目录下所有5.txt 的文件:注意“子目录”下没此文件,但依然列出来了,因为“子目录”-“电影2”下有5.txt文件例:for /r c:/tmp %i in (5.txt) do @echo %i 列举c:/tmp目录下所有的5.txt文件,但此目录及子目录下根本没有5.txt文件,结果列出来了目录结构FOR /L %variable IN (start,step,end) DO command [command-parameters]该集表示以增量形式从开始到结束的一个数字序列。
cmd 循环语句
cmd 循环语句
循环语句是编程语言中的一种基本结构,用于重复执行一段代码直到满足指定条件为止。
在命令提示符(cmd)中,循环语句可以通过使用批处理脚本来实现。
在cmd中,常见的循环语句有for循环和while循环。
1. for循环:使用for命令可以按照指定的方式来循环执行一系列命令。
常见的for循环形式有三种:
- for /l:用于按照指定的起始值、终止值和步长来循环执行一系列命令。
- for /f:用于按行读取指定文件或命令的输出,并对每行内容进行处理。
- for /r:用于按照指定路径及其子文件夹中的文件进行递归遍历,并对每个文件进行处理。
2. while循环:在cmd中没有内置的while循环语句,但可以通过if语句结合goto命令来实现类似的循环。
具体步骤如下:
-设置一个标签(label),用于指定循环的入口。
-使用if语句来判断循环条件是否满足,如果满足则继续执行循环体内的命令,否则跳转到循环结束的标签。
-在循环体内添加要执行的命令。
-使用goto命令将控制跳转到设置的标签,实现循环。
正如上面所提到的,cmd中的循环语句相对比较简单,如果需要更复杂的循环逻辑,可能需要使用其他编程语言或使用批处理脚本结合其他工具来实现。
此外,循环语句的使用需要注意避免无限循环,即出现循环条件始终为真的情况,导致程序陷入死循环。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分类:2010-06-11 13:0416793人阅读(0)批处理for命令详解FOR这条命令基本上都被用来处理文本,但还有其他一些好用的功能!看看他的基本格式(这里我引用的是批处理中的格式,直接在命令行只需要一个%号)FOR 参数%%变量名IN (相关文件或命令) DO 执行的命令参数:FOR有4个参数/d /l /r /f 他们的作用我在下面用例子解释%%变量名:这个变量名可以是小写a-z或者大写A-Z,他们区分大小写,FOR会把每个读取到的值给他;IN:命令的格式,照写就是了;(相关文件或命令) :FOR要把什么东西读取然后赋值给变量,看下面的例子do:命令的格式,照写就是了!执行的命令:对每个变量的值要执行什么操作就写在这.可以在CMD输入for /看系统提供的帮助!对照一下FOR %%variable IN (set) DO command [command-parameters]%%variable 指定一个单一字母可替换的参数。
(set) 指定一个或一组文件。
可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters为特定命令指定参数或命令行开关。
现在开始讲每个参数的意思/d仅为目录如果Set (也就是我上面写的"相关文件或命令") 包含通配符(* 和),将对与Set 相匹配的每个目录(而不是指定目录中的文件组)执行指定的Command。
系统帮助的格式:FOR /D %%variable IN (set) DO command他主要用于目录搜索,不会搜索文件,看这样的例子@echo offfor /d %%i in (*) do @echo %%ipause把他保存放在C盘根目录执行,就会把C盘目录下的全部目录名字打印出来,而文件名字一个也不显示!在来一个,比如我们要把当前路径下文件夹的名字只有1-3个字母的打出来@echo offfor /d %%i in () do @echo %%ipause这样的话如果你当前目录下有目录名字只有1-3个字母的,就会显示出来,没有就不显示了思考题目:@echo offfor /d %%i in (window) do @echo %%ipause保存到C盘下执行,会显示什么呢自己看吧!/D参数只能显示当前目录下的目录名字,这个大家要注意!/R递归进入根目录树[Drive:]Path,在树的每个目录中执行for 语句。
如果在/R 后没有指定目录,则认为是当前目录。
如果Set 只是一个句点(.),则只枚举目录树。
系统帮助的格式:FOR /R [[drive:]path] %%variable IN (set) DO command上面我们知道,/D只能显示当前路径下的目录名字,那么现在这个/R也是和目录有关,他能干嘛呢放心他比/D强大多了!他可以把当前或者你指定路径下的文件名字全部读取,注意是文件名字,有什么用看例子!@echo offfor /r c:/ %%i in (*.exe) do @echo %%ipause咋们把这个BAT保存到D盘随便哪里然后执行,我会就会看到,他把C盘根目录,和每个目录的子目录下面全部的EXE文件都列出来了,这里的c:/就是目录了。
再来一个@echo offfor /r %%i in (*.exe) do @echo %%ipause参数不一样了,这个命令前面没加那个C:/也就是搜索路径,这样他就会以当前目录为搜索路径,比如你这个BAT你把他防灾d:/test目录下执行,那么他就会把D:/test目录和他下面的子目录的全部EXE文件列出来!!!/L迭代数值范围使用迭代变量设置起始值(Start#),然后逐步执行一组范围的值,直到该值超过所设置的终止值(End#)。
/L 将通过对Start# 与End# 进行比较来执行迭代变量。
如果Start# 小于End#,就会执行该命令。
如果迭代变量超过End#,则命令解释程序退出此循环。
还可以使用负的Step# 以递减数值的方式逐步执行此范围内的值。
例如,(1,1,5) 生成序列1 2 3 4 5,而(5,-1,1) 则生成序列(5 4 3 2 1)。
语法是:系统帮助的格式:for /L %% Variable in (Start#,Step#,End#) do Command例如:@echo offfor /l %%i in (1,1,5) do @echo %%ipause保存执行看效果,他会打印从1 2 3 4 5 这样5个数字(1,1,5)这个参数也就是表示从1开始每次加1直到5终止!再看这个例子@echo offfor /l %%i in (1,1,5) do start cmdpause执行后是不是吓了一跳,怎么多了5个CMD窗口,呵呵!如果把那个(1,1,5)改成(1,1,65535)会有什么结果,我先告诉大家,会打开65535个CMD窗口....这么多你不死机算你强!当然我们也可以把那个start cmd改成md %%i 这样就会建立指定个目录了!!!名字为1-65535看完这个被我赋予破坏性质的参数后,我们来看最后一个参数/f含有/F的for详细说明含有/F的for有很大的用处,在批处理中使用的最多,用法如下:格式:FOR /F ["options"] %%i IN (file) DO commandFOR /F ["options"] %%i IN ("string") DO commandFOR /F ["options"] %%i IN ('command') DO command这个可能是最常用的,也是最强的命令,主要用来处理文件和一些命令的输出结果。
file代表一个或多个文件string 代表字符串command代表命令["options"] 可选对于FOR /F %%i IN (file) DO commandfile为文件名,按照官方的说法是,for会依次将file中的文件打开,并且在进行到下一个文件之前将每个文件读取到内存,按照每一行分成一个一个的元素,忽略空白的行,看个例子。
假如文件中有如下内容:第1行第1列第1行第2列第1行第3列第2行第1列第2行第2列第2行第3列第3行第1列第3行第2列第3行第3列你想显示中的内容,会用什么命令呢当然是type,typefor也可以完成同样的命令:for /f %%i in do echo %%i还是先从括号执行,因为含有参数/f,所以for会先打开,然后读出里面的所有内容,把它作为一个集合,并且以每一行作为一个元素,所以会产生这样的集合,{“第1行第1列第1行第2列第1行第3列”,1行第1列第1行第2列第1行第3列.第2行第1列第2行第2列第2行第3列第3行第1列第3行第2列第3行第3列执行for /f "eol=. tokens=*" %%i in do echo %%i结果是:第3行第1列第3行第2列第3行第3列用eol来告诉for忽略以“.”开头的行。
同样也必须加tokens=*,否则只会显示“第3行第1列======================================================终极dos批处理循环命令详解格式:FOR [参数] %%变量名IN (相关文件或命令) DO 执行的命令作用:对一个或一组文件,字符串或命令结果中的每一个对象执行特定命令,达到我们想要的结果。
注意:在批处理文件中使用FOR 命令时,指定变量请使用%%variable,而不要用%variable。
变量名称是区分大小写的,所以%i 不同于%I.关于:for命令可以带参数或不带参数,带参数时支持以下参数:/d /l /r /f下面分别解释一下===零:无参数时:---FOR %variable IN (set) DO command [command-parameters]%variable 指定一个单一字母可替换的参数。
(set) 指定一个或一组文件。
可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters为特定命令指定参数或命令行开关。
TTT示例:for %%i in (t*.*) do echo %%i --显示当前目录下与t*.*相匹配的文件(只显示文件名,不显示路径)for %%i in (d:/mydocuments/*.doc) do @echo %%i --显示d:/mydocuments/目录下与*.doc相匹配的文件===一、参数/d (参数只能显示当前目录下的目录名字)---格式:FOR /D %variable IN (set) DO command [command-parameters]这个参数主要用于目录搜索,不会搜索文件,/D 参数只能显示当前目录下的目录名字。
(TTT特别说明:只会搜索指定目录下的目录,不会搜索再下一级的目录。
)TTT示例:for /d %%i in (c:/*) do echo %%i --显示c盘根目录下的所有目录for /d %%i in () do echo %%i --显示当前目录下名字只有1-3个字母的目录===二、参数/R (搜索指定路径及所有子目录中与set相符合的所有文件)---格式:FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters] 此命令会搜索指定路径及所有子目录中与set相符合的所有文件,注意是指定路径及所有子目录。
1、set中的文件名如果含有通配符(或*),则列举/R参数指定的目录及其下面的所用子目录中与set相符合的所有文件,无相符文件的目录则不列举。
2、如果set中为具体文件名,不含通配符,则枚举该目录树(即列举该目录及其下面的所有子目录)(并在后面加上具体的文件名),而不管set中的指定文件是否存在。
例:for /r c:/ %%i in (*.exe) do echo %%i --把C盘根目录,和每个目录的子目录下面全部的EXE文件都列出来了!!!!TTT示例:for /r c:/ %%i in do echo %%i --枚举了c盘所有目录for /r d:/backup %%i in (1) do echo %%i --枚举d/backup目录for /r c:/ %%i in do if exist %%i echo %%i --很好的搜索命令,列举存在的目录===三、参数/L (该集表示以增量形式从开始到结束的一个数字序列。