批处理命令行for语句
批处理命令大全

会分析my中的每一行,忽略以分号打头的那些行,将每 行中的第二个和第三个符号传递给for程序体;用逗号和/ 或空格定界符号。
请注意,这个for程序体的语句引用%i来取得第二个符号, 引用%j来取得第三个符号,引用%k来取得第三个符号后 的所有剩余符号。对于带有空格的文
件名,您需要用双引号将文件名括起来。为了用这种方 式来使用双引号,您还需要使用usebackq选项,否则,双 引号会被理解成是用作定义某个要分析
C::>SHIFT.BAT12345678
91011 123456789 2345678910
34567891011 以上就是基于WIN2000下的9个批处理命令。 第二
部分:特殊的符号与批处理
在命令行下有些符号是不允许使用的但有些符号却有着特殊的意 义。 1、符号(@) @在批处理中的意思是关闭当前行
的字符串的。
%i专门在for语句中得到说明,%j和%k是通过tokens=选项 专门得到说明的。您可以通过tokens=一行指定最多26个
符号,只要不试图说明一个高于字母'z'或'Z'的变数。请记 住,FOR变量名分大小写,是通用的;而且,同时不能有 52个以上都在使用中。 您还
可以在相邻字符串上使用FOR/F分析逻辑;方法是,用单 引号将括号之间的括起来。这样,该字符串会被当作一 个檔中的一个单一
51.txt 2003-03-1211:430aierrorlog.txt 2003-03-3000:3530,571202.108.t
xt 5个文件18,630,070字节 0个目录1,191,542,784可用字节 >将命令执行的结果覆盖了原始的檔内容。 在传递给
控制台的时候程序将不会有任何回显(注意:这里的回 显跟echooff关掉的回显不是同一概念。Echooff关掉的是 输入命令的回显,这里的回显是
for批处理语法

路径+文件名:如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命令也一样。它一次只能从集合里抽取一个数值来执行后面的命令,而不能同时抽取两个。
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的命令及使用

批处理文件BAT的命令及使用1. echoecho命令用于在命令行窗口上显示文本或变量的内容。
用法:echo <文本>2. setset命令用于设置或显示环境变量。
用法:set <变量名称>=<值>3. ifif命令用于执行条件判断,根据条件的满足与否执行相应的操作。
用法:- 单个条件:if <条件> <命令>- 多个条件:if <条件1> <命令1> else if <条件2> <命令2> else <命令3>4. forfor命令用于循环操作,并可以对文件、文件夹、字符串等进行遍历操作。
用法:- 遍历文件/文件夹:for /r <路径> %变量 in (<通配符>) do <命令>- 数字循环:for /l %变量 in (<起始值>, <步长>, <结束值>) do<命令>5. callcall命令用于调用另一个批处理文件,并在调用完成后返回当前文件。
用法:call <批处理文件路径>6. startstart命令用于启动一个新的命令行窗口或程序,并可指定窗口标题、运行目录等选项。
用法:start <选项> <程序或文件路径>7. pausepause命令用于暂停批处理的执行,直到用户按下任意键才继续执行下一条命令。
用法:pause8. cdcd命令用于更改当前目录。
用法:cd <目录路径>9. mdmd命令用于创建一个新的目录。
用法:md <目录路径>10. deldel命令用于删除文件或文件夹。
用法:- 删除文件:del <文件路径>- 删除文件夹:del /s <文件夹路径>11. copycopy命令用于复制文件、文件夹或目录。
批处理命令大全

的字符串的。 %i专门在for语句中得到说明,%j和%k是通过tokens=选项 专门得到说明的。您可以通过tokens=一行指定最多26个
符号,只要不试图说明一个高于字母'z'或'Z'的变数。请记 住,FOR变量名分大小写,是通用的;而且,同时不能有 52个以上都在使用中。 您还
可以在相邻字符串上使用FOR/F分析逻辑;方法是,用单 引号将括号之间的filenameset括起来。这样,该字符串会 被当作一个檔中的一个单一
程序执行完毕跳至标题exit处退出 gotoexit :exit Rem这里是程序的出口 2、IFstring1==string2c
ommand 检测当前变量的值做出判断 ECHOOFF IF%1==2gotono Echo变数相等! Gotoexit :no
echo变数不相等 gotoexit :exit 大家可以这样看效果C:>test.bat数字 3、IF[NOT]EXISTfi
部分:特殊的符号与批处理 在命令行下有些符号是不允许使用的但有些符号却有着特殊的意 义。 1、符号(@) @在批处理中的意思是关闭当前行
的回显。我们从上面知道用命令echooff可以关掉整个批 处理的命令回显但却不能不显示echooff这个命令。现在 我们在这个命令前加上@这样e
chooff这一命令就被@关闭了回显从而达到所有命令均不回 显得要求 2、符号(>) >的意思是传递并覆盖。他所起的作用是将运行后的回显结
D如果集中包含通配符,则指定与目录名匹配,而不与文 件名匹配。 /F从指定的文件中读取数据作为变量 eol=c-指一个行注释字符的结尾(就
一个) skip=n-指在檔开始时忽略的行数。 delims=xxx-指分隔符集。这个替换了空格和跳格键的默认分隔符 集。 tokens
批处理命令中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语句的基本⽤法三 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。
为了⽅便起见,若不是特别强调,以下的讲解都以批处理⽂件环境为例。
bat(if和for的使用详解)

BAT语句结构类似于C语言,批处理也有它的语句结构。
批处理的语句结构主要有选择结构(if语句)、循环结构(for语句)等。
if语句(选择结构)if语句实现条件判断,包括字符串比较、存在判断、定义判断等。
通过条件判断,if语句即可以实现选择功能。
1、字符串比较if语句仅能够对两个字符(串)是否相同、先后顺序进行判断等。
其命令格式为:IF [not] string1 compare-op string2 command1 [else command2]其中,比较操作符compare-op有以下几类:== - 等于EQU - 等于NEQ - 不等于LSS - 小于LEQ - 小于或等于GTR - 大于GEQ - 大于或等于选择开关/i则不区分字符串大小写;选择not项,则对判断结果进行逻辑非。
字符串比较示例:===============================================@echo offset str1=abcd1233set str2=ABCD1234if %str1%==%str2% (echo 字符串相同!) else (echo 字符串不相同!) if /i %str1% LSS %str2% (echo str1^<str2) else (echo str1^>=str2) echo.set /p choice=是否显示当前时间?(y/n)if /i not %choice% EQU n echo 当前时间是:%date% %time%pause>nul===============================================对于最后一个if判断,当我们输入n或N时的效果是一样的,都不会显示时间。
如果我们取消开关/i,则输入N时,依旧会显示时间。
另外请注意一下几个细节:1-echo str1^<str2和echo str1^>=str2;2-echo.。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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是两个不同的变量。
变量名前面必须是%,当在命令提示符下执行时,只用一个%;而在批处理程序中,必须用%%。
一行语句中,一般只需定义一个变量。
使用/f参数中的tokens 选项可以将集合中的元素分解成多个值,并自动定义新的变量对应这些值。
这时语句中可以使用多个变量,通常按字母顺序命名,即第一个是%%a,那么后一个就用%%b。
如果第一个是%%i,后一个就用%%j。
依此类推。
具体看后面的相关内容。
变量可以直接在do后面的命令中使用。
每次使用的变量总数不超过52个。
3、集合:集合必须放在括号里。
集合是一行文本,这行文本可能有几种类型,如“你好”只是一串字符;“c:\boot.ini”是一个文件;“dir /b”是一个命令。
(1)如果for语句中没有使用任何参数,对待集合文本的处理方式是:第一步:如果集合文本用一对百分号(%)括起来,则系统在执行for 循环时首先查找前面定义的变量中是否有与百分号内文本相同的,有则以该变量值替换掉集合文本,否则集合文本不变,进入第三步。
举例:设当前目录为D盘根目录,且根目录存在文件hello.txt、study.txt。
set stuname=hello.txtfor %%i in (stuname) do echo %%i ;将显示stuname。
for %%i in (%ttuname%) do echo %%i ;将显示%ttuname%,因为没有这个变量。
for %%i in (%stuname%) do echo %%i ;将显示hello.txt,哪怕这个文件不存在,也仍然显示这个名字。
for %%i in (%stuname%) do echo %%~ti ;将显示hello.txt文件的最后修改日期。
如果文件不存在,则不显示任何东西。
这个命令只是验证这里是把hello.txt优先作为一个文件来处理的。
第二步:如果集合文本用一对半角双引号(以下在谈及标点符号时均为英文半角,不再说明)括起来了,则先去掉双引号,再看是否被百分号括着。
如果引号内的文本用百分号括起来了,则查找是否存在相应的变量名。
存在的话,用变量值替换掉变量,再用双引号括起来作为集合文本,否则集合文本不变,进入第三步。
举例:继续上面的例子for %%i in ("%stuname%") do echo %%~ti ;和不加双引号效果相同。
for %%i in ("stuname") do echo %%i ;直接显示"stuname"。
for %%i in ("stuname teachname") do echo %%i ;直接显示"stunameteachname"。
这里是把引号内内容作为整体处理的,注意与不加双引号的区别。
第三步:如果集合文本被双引号括着的话,先去掉双引号。
然后检查当前目录下是否存在同名的目录或文件。
如果存在,将该文件作为集合元素处理(这里也接受通配符,如*.txt。
如果用了通配符,有匹配的文件(不含目录)的,将这些文件名各作为集合的一个元素。
没有匹配的,则循环结束,输出情况依命令而定)。
如果不存在这样的目录或文件,再看原来是否有双引号,有就作为一行文本对待,整体作为集合元素处理。
这时集合将只有一个元素,for循环也只能循环一次就退出。
如果原来没有双引号括着,再看该文本有没有用空格或逗号分隔。
没有的话,则集合只有一个元素,否则根据分隔符把文本分成多个部分,每个部分单独作为集合的一个元素。
参见开篇的例子。
举例:继续上面的例子for %%i in ("hello.txt") do echo %%~ti ;显示这个文件的时间for %%i in (hello.txt) do echo %%~ti ;显示这个文件的时间,加不加双引号没区别。
for %%i in (*.txt) do echo %%i ;显示当前目录下(不含子目录)所有文本文件的名字,自然也包括hello.txt和study.txt。
而且加了双引号结果也一样。
for %%i in (hello study) do echo %%i ;两个单词分两行显示for %%i in ("hello study") do echo %%i ;显示"hello study",即如果不存在这样的文件,而且字符串中有分隔符的话,有没有双引号效果就不同了。
(2)在前面的例子中,for语句可以接受通配符,但通配符只匹配文件名(没有通配符的,可以是文件也可以是目录)。
如果只想处理目录名而不是文件名时,就可以加参数了。
/d参数——仅目录,如果集合文本中包含通配符(*、?),则将当前目录下的所有符合条件的目录名(不含子目录中的目录)作为集合的元素,如果没找到符合条件的目录名,则集合元素为空。
如果没有任何通配符,则与没有参数效果相同。
举例:接前面的例子,设D盘根目录下还存在soft目录for /d %%i in (*ft*) do echo %%~ti ;显示soft的时间for /d %%i in (*llo*) do echo %%~ti ;没有任何输出,此时不匹配文件,去掉/d参数后就可以显示hello.txt文件的时间了问号用于匹配一个字符,星号匹配任意个字符。
常见的用法有:*、*.*、*.mp3、?、*bc*.*、?xx*.*等,表示不同的名称条件。
/r参数——递归,前面讲的for语句都只对当前目录处理,不能深入到子目录中。
这个参数可以让前面的文件或目录匹配功能深入到子文件夹中,这在查找算法中叫做递归,即不断重复这个过程,直到所有目录及子目录都查找过为止。
与/d参数联用的话,查找所有目录名。
否则只查找所有文件,不处理目录名。
加了这个参数后,如果集合文本中有通配符,则按要求查找,找到显示,找不到不显示。
如果没有通配符,与前面不同的地方在于,系统会把所有找过的目录都显示出来,如果文件或目录(加了/d参数)存在,则按实际找到的进行处理,否则显示成“目录路径\集合文本”格式的字符串。
所以,如果不加通配符的话,适合于找出所有目录,不过需要对结果再进行一定的处理。
另外与/d不同的是,在/r参数后可以指定要查找的路径,以空格隔开。
例子:for /r %%i in (你好) do echo %%i,执行结果(如果当前目录是D盘根目录的话):D:\你好、D:\soft\你好、等等,这样只要把每个后面的“你好”去掉,等同于把所有目录的路径列了出来,而且无论该目录树中是否存在“你好”皆如此。
因为其中没有通配符。
这里即便对结果用if exist 进行确认也没用。
for /r %%i in (你*) do echo %%i,执行结果:以“你”开头的文件名,无论在哪个子目录中的,都会显示出来。
如果没找到,则没有任何显示。
for /r c: %%i in (你*) do echo %%i,在C盘根目录中进行查找,不管当前目录是在哪里。
加上/d参数的用法相同,不再举例。
/L参数——序列,表明集合是一个序列。
这个序列的表示法是:(初值,步进,终值)。
如(1,2,11),产生序列(1,3,5,7,9,11)。
(11,-2,1)产生序列(11,9,7,5,3,1)。
/F参数——文件,这个参数功能最强大,也用得最多。
它可以把文件的内容放到集合元素中。
根据不同的情形,对集合的解释也不相同。
○1如果直接在括号中加入字符串,如(你好)、(你好朋友)等,都会被解释为文件名,这时系统会查找这个文件,如果存在,把文件内容分行作为集合的元素。
如果找不到,则提示文件不存在。
这个参数也可以处理字符串,而且功能更强大。
如果想把集合文本解释为字符串的话,用双引号括起来。
如"你好"、"你好朋友",这些都不会被解释为文件名,而是纯粹的字符串。
系统将根据是否有分隔符将其适当分解,然后作为集合的元素。
注意:不管分解成几个部分,默认情况下都只使用分解后的第1部分(若要处理其它部分,可使用下面的tokens选项)字符串作为一个集合元素,因此集合中也只有一个元素,即循环只执行一次。
当然一般纯字符串的情况根本无需由/f参数来处理。
非字符串的文件名及命令才是/f的主要处理对象。
在有的情况下,我们想执行一个命令,将命令的执行结果作为集合的元素。
这时,可将命令用英文半角的单引号括起来。
如列出当前目录下的所有文件及文件夹,并显示,应输入for /f %%i in ('dir /a') do echo %%i总结:可以根据是否有单引号、双引号,将集合解释为命令、字符串或文件名。