批处理命令行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.。
批处理BAT脚本中for命令的使用方法
@echo off for /r "C:\Test\" %%i in (*.txt) do ( echo %%i ) pause C:\Test>test.bat C:\Test\0.txt C:\Test\Folder1\1_1.txt C:\Test\Folder1\Sub1_1\1_1_1.txt C:\Test\Folder2\2_1.txt 请按任意键继续. . .
6/25
内容概要
• • • • • for for /d for /r for /l for /f 处理文件 处理文件夹 枚举目录树处理文件 处理数字序列 处理字符串、命令输出和文本内容
7/25
for /d 命令的基本语法
for /d %%variable in (set) do command
for %%variable in (set) do command
控制变量: • 区分大小写 • 推荐使用单个英文字母 • 不建议使用数字 • BAT脚本里面使用%%i • CMD窗口里面使用%i 文件集合: • 一个或多个文件 • 可以使用通配符 • 需要放在圆括号里面 • 不判断文件是否真实存 在 需要执行的命令: • 多行命令需要放在圆括 号里面 • BAT脚本里面使用 @echo off 之后不需要使 用多余的@来关闭回显
8/25
添加 /r 可以枚举子文件夹
@echo off for /r "C:\Test\" /d %%i in (*) do ( echo %%i ) pause
C:\Test>test.bat C:\Test\Folder1 C:\Test\Folder2 C:\Test\Folder1\Sub1_1 请按任意键继续. . .
批处理文件语法
批处理文件语法批处理文件是无格式的文本文件,它包含一条或多条命令。
它的文件扩展名为 .bat 或 .cmd。
在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。
使用批处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务。
当然我们的这个版本的主要内容是介绍批处理在入侵中一些实际运用,例如我们后面要提到的用批处理文件来给系统打补丁、批量植入后门程序等。
下面就开始我们批处理学习之旅吧。
一.简单批处理内部命令简介1.Echo 命令打开回显或关闭请求回显功能,或显示消息。
如果没有任何参数,echo 命令将显示当前回显设置。
语法echo [{on off}] [message]Sample:@echo off / echo hello world在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用> >> ^)结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。
2.@ 命令表示不显示@后面的命令,在入侵过程中(例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使用的命令啦。
Sample:@echo off@echo Now initializing the program,please wait a minite...@format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这个参数给我们,效果和/y是一样的。
)3.Goto 命令指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。
语法:goto label (label是参数,指定所要转向的批处理程序中的行。
)Sample:if {%1}=={} goto noparmsif {%2}=={} goto noparms(如果这里的if、%1、%2你不明白的话,先跳过去,后面会有详细的解释。
.bat的for语句
For [ %varable |%%varable] in(set) do commandfor 命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。
1) for {%variable | %%variable} in (set) do command [command-parameters]%variable 指定一个单一字母可替换的参数。
变量名称是区分大小写的,所以 %i 不同于 %I在批处理文件中使用 FOR 命令时,指定变量建议用 %%variable而不要用 %variable。
(set) 指定一个或一组文件。
可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters 为特定命令指定参数或命令行开关。
FOR命令就是把读取的东西,然后赋值给变量。
FOR有4个参数/d、 /l 、 /r 、 /f每个参数的意思分别如下:/d:仅为目录(directory)如果Set (也就是我上面写的"相关文件或命令")包含通配符(*和?),将对与Set 相匹配的每个目录(而不是指定目录中的文件组)执行指定的Command。
/R:递归(recursion)进入根目录树[Drive:]Path,在树的每个目录中执行for语句。
如果在/R后没有指定目录,则认为是当前目录。
如果Set只是一个句点(.),则只枚举目录树。
/L:迭代数值范围(location)使用迭代变量设置起始值(Start#),然后逐步执行一组范围的值,直到该值超过所设置的终止值(End#)。
/L将通过对Start#与End#进行比较来执行迭代变量。
/f:迭代及文件解析使用文件解析来处理命令输出、字符串及文件内容。
使用迭代变量定义要检查的内容或字符串,并使用各种Pars in gKeywords选项进一步修改解析方式。
如果命令扩展名被启用,下列额外的 FOR 命令格式会受到支持:a.FOR /D %variable IN (set) DO command [command-parameters]/D 仅为目录如果集里面包含通配符,则指定与目录名匹配,而不与文件名匹配。
DOS批处理高级教程:第三章 FOR命令中的变量
FOR命令中有一些变量,他们的用法许多新手朋友还不太了解,今天给大家讲解他们的用法!先把FOR的变量全部列出来:~I - 删除任何引号("),扩展%I%~fI - 将%I 扩展到一个完全合格的路径名%~dI - 仅将%I 扩展到一个驱动器号%~pI - 仅将%I 扩展到一个路径%~nI - 仅将%I 扩展到一个文件名%~xI - 仅将%I 扩展到一个文件扩展名%~sI - 扩展的路径只含有短名%~aI - 将%I 扩展到文件的文件属性%~tI - 将%I 扩展到文件的日期/时间%~zI - 将%I 扩展到文件的大小%~$PATH:I - 查找列在路径环境变量的目录,并将%I 扩展到找到的第一个完全合格的名称。
如果环境变量名未被定义,或者没有找到文件,此组合键会扩展到空字符串我们可以看到每行都有一个大写字母"I",这个I其实就是我们在FOR带入的变量,我们FOR语句代入的变量名是什么,这里就写什么.比如:FOR /F %%z IN ('set') DO @echo %%z这里我们代入的变量名是z那么我们就要把那个I改成z,例如%~fI改为%~fz至于前面的%~p这样的内容就是语法了!好开始讲解:一、~I - 删除任何引号("),扩展%I这个变量的作用就如他的说明,删除引号!我们来看这个例子:首先建立临时文件temp.txt,内容如下"1111"2222"3333""4444"44"55"55"55可建立个BAT文件代码如下:@echo off2echo ^"1111>temp.txt3echo "2222">>temp.txt4echo 3333^">>temp.txt5echo "4444"44>>temp.txt6echo ^"55"55"55>>temp.txt复制代码rem 上面建立临时文件,注意不成对的引号要加转义字符^,重定向符号前不要留空格7FOR /F "delims=" %%i IN (temp.txt) DO echo %%~i8pause9del temp.txt复制代码执行后,我们看CMD的回显如下:1111 #字符串前的引号被删除了2222 #字符串首尾的引号都被删除了3333" #字符串前无引号,后面的引号保留4444"44 #字符串前面的引号删除了,而中间的引号保留55"55"55 #字符串前面的引号删除了,而中间的引号保留请按任意键继续. . .和之前temp.txt中的内容对比一下,我们会发现第1、2、5行的引号都消失了,这就是删除引号~i的作用了!删除引号规则如下(BA T兄补充!)1、若字符串首尾同时存在引号,则删除首尾的引号;2、若字符串尾不存在引号,则删除字符串首的引号;3、如果字符串中间存在引号,或者只在尾部存在引号,则不删除。
CMD批处理(4)——批处理循环语句结构
CMD批处理(4)——批处理循环语句结构FOR函数,对⼀组⽂件批量执⾏命令,基本模式如下1.⽂件搜索 for [/D] [/R [路径]] %%变量 in (集合) do (命令)2.等差数列 for /L %%变量 in (开始,间隔,结束) do (命令)3.⽂本处理 for /F ["选项"] %%变量 in (集合) do (命令)⽂件搜索命令⽤法:for [/D] [/R [路径]] %%变量 in (集合) do (命令)/D 只搜索⽂件夹名[可选],若⽆该选项即为只搜索⽂件名/R [路径] 搜索⼦⽬录[可选],如果在 /R 后没有指定⽬录规范,则使⽤当前⽬录。
如果集仅为⼀个单点(.)字符,则枚举该⽬录树。
路径搜索指定⽬录[可选]%%变量可以是⼀个字母(不区分⼤⼩写),数字,或符号,⽤于在命令中使⽤,代表搜索结果。
在若是在命令⾏中⽤%(⼀个),批处理程序中使⽤ FOR 命令时,指定变量使⽤ %%(两个)。
集合指定⼀个或⼀组⽂件。
可以使⽤通配符搜索。
(允许指定多个搜索条件⽤空格分隔 "带空格的搜索条件⽤双引号括住")(当搜索条件不包含通配符时不搜索直接输出因此也可以⽤来指定⽂本⽤空格分隔 "带空格⽂本⽤双引号括住")命令 指定批量执⾏的命令。
使⽤%%变量指定搜索结果。
例1、显⽰当前⽂件夹(不含⼦⽂件夹)下所有bat⽂件的⽂件名for %i in (*.bat) do echo %i例2、计算game⽬录下及所有⼦⽬录下⼀共有多少⽂件for /r game %i in (*) do set a+=1例3、计算多个数字的乘积@echo off:startset /p n=请输⼊多个数字,⽤空格隔开:set c=1for %%i in (%n%) do set /a c*=%%iecho %a%的乘积为%c%goto :start注意:for搜索并不会搜索隐藏⽂件等差数列命令⽤法:for /L %%变量 in (开始,间隔,结束) do (命令)(开始,间隔,结束)表⽰从开始到结束的⼀个数列,间隔为数列差。
批处理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 if 命令的用法
for /l %%i in (1 1 5) do echo %%i
然后运行,可以发现屏幕上显示1 2 3 4 5(每字一行)
/D参数(常用来查询 当前目录 或者 指定目录的文件夹)
如:查询F盘根目录下的文件夹
tokens=1-5
1-5很好理解就1至5,前面我们用delims=后面的字符为分割符,将文本内容分成了多列,那么你需要的是哪
些列呢?
如上例:
通过dilims=,./ 将文本分成了111 222 333 444 555 五列.
注意代码中前面有个%%a 这里的%%a就是代表第一列,第二列就是%%b,第三列就是%%c 依此类推.....
for /f "tokens=1,3* delims=,./ " %%a in ("111,222.333 444/555") do echo %%a %%b %%c
按分隔符将字符串分段后,取第1、3、4-5三段分别作为%%a %%b %%c
for /f "tokens=1,3* delims=,./ " %a in ("111,222.333 444/555") do echo %a %b %c %d %e
那么我们如果把echo %%a %%b %%c %%d %%e 改为 echo %%e %%d %%c %%b %%a 会如何呢?
当然.会显示 555 444 333 222 111
如果是:echo %%b %%d 又会显示222 444
若是第一个%%a把它改为%%i也是一样,那么第二列就是%%j...%%k...依此类推....
DOS中FOR命令用法详解
dir > d:\aa.txt来建立
题外话,如果在dir中加入合适的参数/b,就可以回避多余的部分,还可加入/ad只显示目录,加入/a-d只显示文件等
那么,我们完全可以直接书写命令放入in后的(‘命令’-集)中
for /f "skip=5 tokens=5 " %a in ('dir') do @echo %a
命令:可以是任何合格的DOS命令或外部可被DOS调用的程序,且可采用括号把多条命令括起来,在一次循环中执行。
附注:由于一些目录或文件名可能会有空格,所以很多时候集里和命令里往往需要用英文引号括起来(但有时引号里的内容可能会被认为是字符串)表示是一整体,下面开始的有些例中为简捷起见,忽略文件名或目录名带空格这种情况。
Volume Serial Number is C35D-8998
Directory of D:tmp
09/25/2001 10:40 AM 11,235 yg0925.txt
11/12/2001 04:29 pM 795 buple.txt
04/11/2002 04:18 AM 2,043 vitn.txt
in (变量) 中的那个变量,代表起始的一个变量名,按tokens中定义的总个数来扩充附加变量名,如总个数为3,则%c 就附加%d和%e ,要是%C就附加%D%E… 本例中tokens=1,4仅需两个,起始的是in () 括号中的%c 则每行中第一段赋给%c,第4段赋给变量%d
以第二行(第一行被skip=1跳过了)为例,在 “张三 男 36 A-1 ” 中(正好也是用的空格分隔)共被空格之刀切为五段,只要第1、4,即张三赋给%c, A-1赋给%d,执行@echo %c %d然后下一轮…而空行照旧被省去了。
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]该集表示以增量形式从开始到结束的一个数字序列。
批处理中常用命令介绍(Echo、rem、goto、call、pause、if、for)
批处理中常用命令介绍(Echo、rem、goto、call、pause、if、for)一、echo命令(echo图文版)1. Echo :显示当前ECHO的状态:ECHO ON 或者ECHO OFF 。
2. ECHO ON :ECHO状态设为ON,将显示命令行(如每行前的C:\>等类似标志)。
3. ECHO OFF:CHO状态设为OFF,将不显示命令行(如每行前的C:\>等类似标志) 。
4. ECHO 字符串:将输入的字符串显示在CMD屏幕上。
5. ECHO 字符串&ECHO 字符串… :&,类似and的意思,逻辑运算,用来显示多行数据。
6. ECHO 字符串>文件路径和文件名:将字符串写入文件中,若已有数据将先清空后写入。
7. ECHO 字符串>>文件路径和文件名:将字符串写入文件中,若已有数据将追加到末尾。
注意每次:ECHO 字符串>>文件路径和文件名,命令之后,ECHO就回自动在在字符串后添加换行符,所以要想直接添加到文件末尾,那么文件中已有的数据,不能是ECHO命令先前输入的(或者手工删掉换行符)8. (ECHO 字符串&ECHO 字符串…)>文件路径和文件名:将多行数据写入文件中(注意括号不能去掉,如果括号去掉的话,那么只能写入最后一个,前面的将输出在CMD窗口中。
如果文件中已经有数据,将先自动清空后再写入。
9. (ECHO 字符串&ECHO 字符串…)>>路径和文件名将多行数据写入文件中(注意括号不能去掉,如果括号去掉的话,那么只能写入最后一个,前面的将输出在CMD窗口中。
如果文件中已经有数据,就将该字符串追加到文件的末尾。
10. (ECHO 字符串)>>文件路径和文件名:在文件中另起一行追加上字符串。
如图所示:11. ECHO.:输出空行,即相当于输入一个回车注意命令行中的“.”要紧跟在ECHO后面中间不能有空格,否则“.”将被当作提示信息输出到屏幕。
批处理for命令详解
@echo off
for /l %%i in (1,1,5) do @echo %%i
pause
保存执行看效果,他会打印从1 2 3 4 5 这样5个数字
(1,1,5)这个参数也就是表示从1开始每次加1直到5终止!
再看这个例子
@echo off
for /l %%i in (1,1,5) do start cmd
比如:
for /f "tokens=* delims= " %%i in (a.txt) do echo %%i
执行结果为:
第1行第1列 第1行第2列 第1行第3列
第2行第1列 第2行第2列 第2行第3列
第3行第1列 第3行第2列 第3行第3列
其实就跟for /f %%i in (a.txt) do echo %%i的执行结果是一样的。
个BAT你把他防灾d:/test目录下执行,那么他就会把D:/test目录和他下面的子目录的全部EXE文件列出
来!!!
/L
迭代数值范围
使用迭代变量设置起始值 (Start#),然后逐步执行一组范围的值,直到该值超过所设置的终止值 (End#)
。/L 将通过对 Start# 与 End# 进行比较来执行迭代变量。如果 Start# 小于 End#,就会执行该命令。
他主要用于目录搜索,不会搜索文件,看这样的例子
@echo off
for /d %%i in (*) do @echo %%i
pause
把他保存放在C盘根目录执行,就会把C盘目录下的全部目录名字打印出来,而文件名字一个也不显示!
在来一个,比如我们要把当前路径下文件夹的名字只有1-3个字母的打出来
windows命令行for用法
windows命令⾏for⽤法for /r ⽬录名 %i in (匹配模式1,匹配模式2) do @echo %ifor /r SATA %i in (*.txt) do @echo %iD:\REY\test>for /r "D:\REY\SATA" %i in (*.doc) do move /y "%i" .for /r . %i in (*.doc) do move /y "%i" 01-WORDfor /r "D:\REY\SATA" %i in (*.doc,*.docx) do move /y "%i" "D:\REY\test\01-WORD"for /r "D:\REY\SATA" %i in (*.xls,*.xlt,*.xlsx) do move /y "%i" "D:\REY\test\01-EXCEL"========================================= copy 测试 ================================================for /r "D:\REY\SATA" %i in (*.doc,*.docx) do copy /y "%i" "D:\REY\test\01-WORD"for /r "D:\REY\SATA" %i in (*.xls,*.xlsx) do copy /y "%i" "D:\REY\test\02-EXCEL"for /r "D:\REY\SATA" %i in (*.ppt,*.pptx) do copy /y "%i" "D:\REY\test\03-PPT"for /r "D:\REY\SATA" %i in (*.pdf) do copy /y "%i" "D:\REY\test\04-PDF"for /r "D:\REY\SATA" %i in (*.rar,*.zip) do copy /y "%i" "D:\REY\test\05-RAR_ZIP"========================================= move 操作 ================================================for /r "D:\REY\SATA" %i in (*.doc,*.docx) do move /y "%i" "D:\REY\test\01-WORD"for /r "D:\REY\SATA" %i in (*.xls,*.xlsx) do move /y "%i" "D:\REY\test\02-EXCEL"for /r "D:\REY\SATA" %i in (*.ppt,*.pptx) do move /y "%i" "D:\REY\test\03-PPT"for /r "D:\REY\SATA" %i in (*.pdf) do move /y "%i" "D:\REY\test\04-PDF"for /r "D:\REY\SATA" %i in (*.rar,*.zip) do move /y "%i" "D:\REY\test\05-RAR_ZIP"for /r "D:\REY\SATA" %i in (*.jpg,*.jpeg,*.png) do move /y "%i" "D:\REY\test\06-IMAGE"for /r "D:\REY\SATA" %i in (*.txt,*.chm,*.rtf) do move /y "%i" "D:\REY\test\07-OtherFile"=========================================拓展 ================================================格式:FOR [参数] %%变量名 IN (相关⽂件或命令) DO 执⾏的命令 作⽤:对⼀个或⼀组⽂件,字符串或命令结果中的每⼀个对象执⾏特定命令,达到我们想要的结果。
- 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总结:可以根据是否有单引号、双引号,将集合解释为命令、字符串或文件名。