批处理中的变量+set命令详解++if命令讲解+DOS编程高级技巧
- 格式:docx
- 大小:73.25 KB
- 文档页数:56
批处理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语句的基本要素都有些什么:1、for、in和do是for语句的关键字,它们三个缺⼀不可;2、%%I是for语句中对形式变量的引⽤,就算它在do后的语句中没有参与语句的执⾏,也是必须出现的;3、in之后,do之前的括号不能省略;4、command1表⽰字符串或变量,command2表⽰字符串、变量或命令语句;现在,你可能已经会写⼀个简单的for语句了,⽐如:[code1]@echo offfor %%I in () do echo %%Ipause保存为批处理⽂件并执⾏,将会在弹出的批处理窗⼝中看到这样的信息:请按任意键继续...很快地,你会觉得这个for语句是如此的简单,简单到你丝毫感受不出它的强⼤:这个for语句,和我直接⽤echo语句没什么两样啊!是的,演⽰代码永远都只是演⽰⽽已,就像⼤多数⾼级语⾔的教科书⼀样,在引导新⼿学习的时候,基本上都是千篇⼀律地告诉⼤家如何编写⼀个能显⽰ hello world! 的窗⼝,从这些演⽰代码中,你看不到它们具有多少实⽤性,你只是感到有点好奇:咦,居然弹出了⼀个窗⼝?⽚刻之后,你就会觉得索然⽆味。
批处理中的字符串处理详解2008年03月25日 14:57首先说一下,批处理和高级语言不同,没有字符串处理函数,比如strcat之类的,但是却可以利用环境变量来实现这些函数的功能。
本文对照C语言中的字符串处理函数,讲解在批处理中的实现方法。
首先说一下字符串的存储,在C语言中,采用字符数组或者字符指针来存储字符串,而BAT 中没有这些东东,所以要依靠环境变量来存储。
设置环境变量的语句为set语句,本文不详细介绍了,参考set /?语句。
1、C语中的strcpy函数,将一个字符串复制到另一个字符型指针或字符数组,覆盖原来的字符串。
C语言中的调用方法:strcpy(目标字符串,源字符串)在批处理中的实现方法:set 目标字符串=%源字符串%示例:复制内容到剪贴板代码:@echo off::关闭屏幕回显(可选)set str1=This is old string::设置str1中存储的字符串,注意没有双引号,这点与C语言等不同!set str2=This is new string::设置str2中存储的字符串echo 执行字符串拷贝以前:echo str1=%str1%echo str2=%str2%::先输出一次原有的字符串set str1=%str2%::字符串拷贝echo 执行字符串拷贝以后:echo str1=%str1%echo str2=%str2%::输出执行完字符串拷贝后的字符串echo 输出完毕,按任意键退出&&pause>nul&&exit::输出信息,当用户按任意键时,结束该批处理。
效果图:截图00145.PNG (8.8 KB)2008-3-25 14:212、C语中的strcat函数,将一个字符串连接到另一个字符型指针或字符数组的末尾。
C语言中的调用方法:strcat(目标字符串,源字符串)在批处理中的实现方法:set 目标字符串=%目标字符串%%源字符串%示例:复制内容到剪贴板代码:@echo offset str1=This is string1set str2=This is string2::设置str1和str2中存储的字符串echo 连接字符串以前:echo str1=%str1%echo str2=%str2%::先输出一次原有的字符串set str1=%str1%%str2%::字符串连接echo 连接字符串以后:echo str1=%str1%echo str2=%str2%::输出执行完字符串连接后的两个字符串echo 输出完毕,按任意键退出&&pause>nul&&exit效果图:截图00146.PNG (8.69 KB)2008-3-25 14:213、字符串截取,C中没有这种函数,不过可以通过语句实现,不再介绍,直接说批处理的。
dos命令⾏choice命令使⽤详解Choice 命令使⽤此命令可以让⽤户输⼊⼀个字符,从⽽运⾏不同的命令。
使⽤时应该加/c:参数,c:后应写提⽰可输⼊的字符,之间⽆空格。
它的返回码为1234……。
这个命令在有些Windows版本(⽐如WindowsXP)上可能不可⽤。
语法:CHOICE:[/C[:]按键表] [/N] [/S] [/T[:]选择值,秒数] [显⽰⽂本]其中,/C表⽰可选则的按键,/N表⽰不要显⽰提⽰信息,/S表⽰⼤⼩写字符敏感⽅式,/T表⽰若在批定的时间内没有选择的话,⾃动执⾏/C中定义的某个选择值。
显⽰⽂本是CHOICE命令执⾏时的提⽰信息。
选择结果将⽤ERRORLEVEL值来表⽰。
⽰例:@echo offchoice /c:dme defrag,mem,endif errorlevel 3 goto defragREM 应先判断数值最⾼的错误码if errorlevel 2 goto memif errorlevel 1 goto end:defragc:\dos\defraggoto end:memmemgoto end:endecho good bye此⽂件运⾏后,将显⽰ defrag,mem,end[D,M,E]? ⽤户可选择d m e ,然后if语句将作出判断,d表⽰执⾏标号为defrag的程序段,m表⽰执⾏标号为mem的程序段,e表⽰执⾏标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显⽰good bye,⽂件结束。
可替换的命令对WindowsXP上不能使⽤CHOICE命令的情形,如果想使⽤相似的功能,可以使⽤ SET 命令,参见Set 命令 /P选项。
choice⼀般在cmd批处理中⽤来根据⽤户输⼊执⾏不同的操作,⾮常实⽤,例如下⾯是两个软件根据⽤户选择来执⾏@echo off远程协助⼯具集:startclscolor 0aMODE con: COLS=60 LINES=20echo.echo ===============================echo 请选择远程⼯具echo ===============================echo.echo 1. AnyDeskecho.echo 2. TeamViewerecho.echo.:choset choice=set /p choice= 请输⼊⼯具编号:IF NOT "%Choice%"=="" SET Choice=%Choice:~0,1%if /i "%choice%"=="1" goto AnyDeskif /i "%choice%"=="2" goto TeamViewer:AnyDeskAnyDesk.exeexit:TeamViewerTeamViewer.exeexit下⾯来介绍⼀下choice的命令使⽤CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]描述:该⼯具允许⽤户从选择列表选择⼀个项⽬并返回所选项⽬的索引。
第一章批处理基础第一节常用批处理内部命令简介批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BA T或者CMD。
这些命令统称批处理命令。
小知识:可以在键盘上按下Ctrl+C组合键来强行终止一个批处理的执行过程。
了解了大概意思后,我们正式开始学习.先看一个简单的例子!@echo offecho "欢迎来到非常BA T!"pause把上面的3条命令保存为文件test.bat或者test.cmd然后执行,他就会在屏幕上显示以下二行话:欢迎来到非常BAT!请按任意键继续. . .这就是一个简单批处理文件了,这个批处理文件一共就用了2条命令"echo" 和"pause" 还有一个特殊符号"@"从上面这个简单的批处理中,我们可以发现其实批处理就是运用一些含有特殊意义的符号和一些完成指定功能的命令组合而成,那么在批处理中有多少这样的特殊符号和功能命令呢?我们现在就来仔细了解一下一些最常用的!(以下内容来源网络,请各位仔细阅读,好进入下节的实例说明)======================================================批处理的常见命令(未列举的命令还比较多,请查阅帮助信息)1、REM 和::2、ECHO 和@3、PAUSE4、ERRORLEVEL5、TITLE6、COLOR7、mode 配置系统设备8、GOTO 和:9、FIND10、START11、assoc 和ftype12、pushd 和popd13、CALL14、shift15、IF16、setlocal 与变量延迟17、A TTRIB 显示或更改文件属性介绍命令1、REM 和::REM为注释命令,一般用来给程序加上注解,该命令后的内容不被执行,但能回显。
其次, :: 也可以起到rem 的注释作用, 而且更简洁有效; 但有两点需要注意:第一, 任何以冒号:开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容。
批处理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循环命令详解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 /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教程,为什么我这么讲:1.这个教程非常全面2.教程大量采用实例讲解,简单易懂3.作者很有心,在教程中间插入了许多有趣的东西,让大家学习过程当中不在感到枯燥[不过在这里为了方便大家收录,我给去掉了,SORRY啊]4.教程写得很细。
5.由于教程非常全面,完成可以把它当作你学习的参考资料,在遇到问题的时候在这里一般都可以找到解决的方法。
在学习之前请作好心理准备,因为教程很长,不过大家也不要着急,一口是吃不成胖子的,慢慢来!第一章批处理基础第一节常用批处理内部命令简介批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BA T或者CMD。
这些命令统称批处理命令。
小知识:可以在键盘上按下Ctrl+C组合键来强行终止一个批处理的执行过程。
了解了大概意思后,我们正式开始学习.先看一个简单的例子!@echo offecho "欢迎来到非常BA T!"pause把上面的3条命令保存为文件test.bat或者test.cmd然后执行,他就会在屏幕上显示以下二行话:欢迎来到非常BAT!请按任意键继续. . .这就是一个简单批处理文件了,这个批处理文件一共就用了2条命令"echo" 和"pause" 还有一个特殊符号"@"从上面这个简单的批处理中,我们可以发现其实批处理就是运用一些含有特殊意义的符号和一些完成指定功能的命令组合而成,那么在批处理中有多少这样的特殊符号和功能命令呢?我们现在就来仔细了解一下一些最常用的!(以下内容来源网络,请各位仔细阅读,好进入下节的实例说明)======================================================批处理的常见命令(未列举的命令还比较多,请查阅帮助信息)1、REM 和::2、ECHO 和@3、PAUSE4、ERRORLEVEL5、TITLE6、COLOR7、mode 配置系统设备8、GOTO 和:9、FIND10、START11、assoc 和ftype12、pushd 和popd13、CALL14、shift15、IF16、setlocal 与变量延迟17、ATTRIB 显示或更改文件属性介绍命令1、REM 和::REM为注释命令,一般用来给程序加上注解,该命令后的内容不被执行,但能回显。
分类: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。
Windows批Windows批处理(cmdbat)常见问题:1.如果你⾃⼰编写的.bat⽂件,双击打开,出现闪退2.批处理.bat ⽂件中输出中⽂乱码解决⽅法在⽂章末尾!前⾔批处理⽂件(batch file)包含⼀系列 DOS命令,通常⽤于⾃动执⾏重复性任务。
⽤户只需双击批处理⽂件便可执⾏任务,⽽⽆需重复输⼊相同指令。
编写批处理⽂件⾮常简单,但难点在于确保⼀切按顺序执⾏。
编写严谨的批处理⽂件可以极⼤程度地节省时间,在应对重复性⼯作时尤其有效在Windows中善⽤批处理可以简化很多重复⼯作什么是批处理?批处理(Batch),也称为批处理脚本。
顾名思义,批处理就是对某对象进⾏批量的处理。
批处理⽂件的扩展名为bat⽬前⽐较常见的批处理包含两类:DOS批处理和PS批处理。
PS批处理是基于强⼤的图⽚编辑软件Photoshop的,⽤来批量处理图⽚的脚本;⽽DOS批处理则是基于DOS命令的,⽤来⾃动地批量地执⾏DOS命令以实现特定操作的脚本。
这⾥要讲的就是DOS批处理批处理是⼀种简化的脚本语⾔,它应⽤于DOS和Windows系统中,它是由DOS或者Windows系统内嵌的命令解释器(通常是或者CMD.EXE)解释运⾏批处理类似于Unix中的Shell脚本。
批处理⽂件具有.bat或者.cmd的扩展名,其最简单的例⼦,是逐⾏书写在命令⾏中会⽤到的各种命令。
更复杂的情况,需要使⽤if,for,goto等命令控制程序的运⾏过程,如同C,Basic等中⾼级语⾔⼀样。
如果需要实现更复杂的应⽤,利⽤外部程序是必要的,这包括系统本⾝提供的外部命令和第三⽅提供的⼯具或者软件怎么创建批处理⽂件?批处理⽂件,或称为批处理程序,是由⼀条条的DOS命令组成的普通⽂本⽂件,可以⽤记事本直接编辑或⽤DOS命令创建,也可以⽤DOS下的⽂本编辑器Edit.exe来编辑。
在“命令提⽰”下键⼊批处理⽂件的名称,或者双击该批处理⽂件,系统就会调⽤Cmd.exe运⾏该批处理程序⼀般情况下,每条命令占据⼀⾏当然也可以将多条命令⽤特定符号(如:&、&&、|、||等)分隔后写⼊同⼀⾏中还有的情况就是像if、for等较⾼级的命令则要占据⼏⾏甚⾄⼏⼗⼏百⾏的空间。
批处理高级教程精选合编20080331(Windows XP) 前言 本教程主要引用伤脑筋版主的系列文章,同时参考引用[英雄]教程等其他批处理教程,本文将这些文章合并在一起,并适当修改,修改整理也是学习过程,力求深刻而又简单易懂,主要目的是方便自己以后查阅。 本教程很长啊,需要一定的耐心才能看完,能够看完的话,差不多就是批处理高手了,即使不是高手也是熟手了。如果连续不停的看完本教程而且理解得差不多,估计人也累趴下了。本教程适合对dos有一定基础的人慢慢学习或查阅。 查阅方法:复制目录中的条目,搜索即可。
目录 第一章 批处理基础 第一节 常用批处理内部命令简介 1、REM 和 :: 2、ECHO 和 @ 3、PAUSE 4、ERRORLEVEL 5、TITLE 6、COLOR 7、mode 配置系统设备 8、GOTO 和 : 9、FIND 10、START 11、assoc 和 ftype 12、pushd 和 popd 13、CALL 14、shift 15、IF 16、setlocal 与 变量延迟
第二节 常用特殊符号 1、@ 命令行回显屏蔽符 2、% 批处理变量引导符 3、> 重定向符 4、>> 重定向符 5、<、>&、<& 重定向符 6、| 命令管道符 7、^ 转义字符 8、& 组合命令 9、&& 组合命令 10、|| 组合命令 11、"" 字符串界定符 12、, 逗号 13、; 分号 14、() 括号 15、! 感叹号
第二章 FOR命令详解 一、参数 /d 二、参数 /R 三、参数 /L 四、参数 /F
第三章 FOR命令中的变量 一、 ~I - 删除任何引号("),扩展 %I 二、 %~fI - 将 %I 扩展到一个完全合格的路径名 三、 %~dI - 仅将 %I 扩展到一个驱动器号 四、 %~pI - 仅将 %I 扩展到一个路径 五、 %~nI - 仅将 %I 扩展到一个文件名 六、 %~xI - 仅将 %I 扩展到一个文件扩展名 七、 %~sI - 扩展的路径只含有短名 八、 %~aI - 将 %I 扩展到文件的文件属性 九、 %~tI - 将 %I 扩展到文件的日期/时间 十、 %~zI - 将 %I 扩展到文件的大小 十一、 %~$PATH:I
第四章 批处理中的变量 一、系统变量 二、自定义变量
第五章 set命令详解 一、用set命令设置自定义变量 二、用set命令进行简单计算 三、用set命令进行字符串处理 1、字符串替换 2、字符串截取
第六章 if命令讲解 第一种用法:IF [NOT] ERRORLEVEL number command 第二种用法:IF [NOT] string1==string2 command 第三种用法:IF [NOT] EXIST filename command 第四种用法:IF增强的用法
第七章 DOS编程高级技巧 一、界面设计 二、if…else…条件语句 三、循环语句 四、子程序 五、用ftp命令实现自动下载 六、用7-ZIP实现命令行压缩和解压功能 七、调用VBScript程序 八、将批处理转化为可执行文件 九、时间延迟 十、模拟进度条
整理者:龙卷风http://xiangkg.blog.163.com 1、更正了所有的错别字,适当排版,增加条理性。 2、运行改善所有例子,并纠正了一些语法错误。 3、补充了一些不完全的地方。 4、第一章参考了网上许多教程汇编而成。 5、20080229补充了变量延迟的问题。 6、20080305修改了参数usebackq的说明 6、不断学习中,不断更新中。
====================================================================== 第一章 批处理基础
第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD。这些命令统称批处
理命令。 小知识:可以在键盘上按下Ctrl+C组合键来强行终止一个批处理的执行过程。 了解了大概意思后,我们正式开始学习.先看一个简单的例子! @echo off echo "欢迎来到非常BAT!" pause
把上面的3条命令保存为文件test.bat或者test.cmd然后执行, 他就会在屏幕上显示以下二行话:
欢迎来到非常BAT! 请按任意键继续. . . 这就是一个简单批处理文件了,这个批处理文件一共就用了2条命令 "echo" 和"pause" 还有一个特殊符号"@"
从上面这个简单的批处理中,我们可以发现其实批处理就是运用一些含有特殊意义的符号和一些完成指定功能的命令组合而成,那么在批处理中
有多少这样的特殊符号和功能命令呢?我们现在就来仔细了解一下一些最常用的! (以下内容来源网络,请各位仔细阅读,好进入下节的实例说明) ======================================================
批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和 :: 2、ECHO 和 @ 3、PAUSE 4、ERRORLEVEL 5、TITLE 6、COLOR 7、mode 配置系统设备 8、GOTO 和 : 9、FIND 10、START 11、assoc 和 ftype 12、pushd 和 popd 13、CALL 14、shift 15、IF 16、setlocal 与 变量延迟
介绍命令 1、REM 和 :: REM为注释命令,一般用来给程序加上注解,该命令后的内容不被执行,但能回显。 其次, :: 也可以起到rem 的注释作用, 而且更简洁有效; 但有两点需要注意: 第一, 任何以冒号:开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容。 有效标号:冒号后紧跟一个以字母数字开头的字符串,goto语句可以识别。 无效标号:冒号后紧跟一个非字母数字的一个特殊符号,goto无法识别的标号,可以起到注释作用,所以 :: 常被用作注释符号,其实 :+ 也 可起注释作用。 第二, 与rem 不同的是, ::后的字符行在执行时不会回显, 无论是否用echo on打开命令行回显状态, 因为命令解释器不认为他是一个有效的命令行, 就此点来看, rem 在某些场合下将比 :: 更为适用; 另外, rem 可以用于 config.sys 文件中。 2、ECHO 和 @
打开回显或关闭回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。 @字符放在命令前将关闭该命令回显,无论此时echo是否为打开状态。
语法: echo [{ on|off }] [message] echo. #此用法将显示一空行,相当于回车,非常有用。
执行echo off将关闭回显,它后面的所有命令都不显示命令本身,只显示执行后的结果,除非执行echo on命令。 执行@echo off不但关闭以后命令的回显,连echo off命令本身也不显示了。 通常以@echo off作为批处理程序的首行。 一般用ECHO MESSAGE来显示一个特定的消息。
例: @Echo off Echo hello Pause 运行显示:hello
3、PAUSE PAUSE,玩游戏的人都知道,暂停的意思 在这里就是停止系统命令的执行并显示下面的内容。
例: PAUSE 运行显示: 请按任意键继续. . .
要显示其他提示语,可以这样用: Echo 其他提示语 & pause > nul
4、errorlevel 程序返回码 echo %errorlevel% 每个命令运行结束,可以用这个命令行格式查看返回码 用于判断刚才的命令是否执行成功 默认值为0,一般命令执行出错会设 errorlevel 为1
5、title 设置cmd窗口的标题 title 新标题 #可以看到cmd窗口的标题栏变了
6、COLOR 设置默认的控制台前景和背景颜色。
COLOR [attr] attr 指定控制台输出的颜色属性 颜色属性由两个十六进制数字指定 -- 第一个为背景,第二个则为 前景。每个数字可以为以下任何值之一:
0 = 黑色 8 = 灰色 1 = 蓝色 9 = 淡蓝色 2 = 绿色 A = 淡绿色 3 = 湖蓝色 B = 淡浅绿色 4 = 红色 C = 淡红色 5 = 紫色 D = 淡紫色 6 = 黄色 E = 淡黄色 7 = 白色 F = 亮白色
如果没有给定任何参数,该命令会将颜色还原到 CMD.EXE 启动时 的颜色。这个值来自当前控制台窗口、/T 开关或 DefaultColor 注册表值。
如果用相同的前景和背景颜色来执行 COLOR 命令,COLOR 命令 会将 ERRORLEVEL 设置为 1。
例如: "COLOR fc" 在亮白色上产生亮红色 7、mode 配置系统设备 配置系统设备。 串行口: MODE COMm[:] [BAUD=b] [PARITY=p] [DATA=d] [STOP=s] [to=on|off] [xon=on|off] [odsr=on|off] [octs=on|off] [dtr=on|off|hs]