DOS批处理教程讲课稿.doc
Good is good, but better carries it.精益求精,善益求善。DOS批处理教程-本教程主要引用伤脑筋版主的系列文章,同时参考引用英雄教程等其他批处理教程,本文将这些文章合并在一起,并适当修改,修改整理也是学习过程,力求深刻而又简单易懂,主要目的是方便自己以后查阅。 本教程很长啊,需要一定的耐心才能看完,本人一边学习一边整理,断断续续的用了一个多月,弄懂了很多以前不明白的问题。如果连续不停的看完本教程而且理解得差不多,估计人也累趴下了,那时候相信你已经是一个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命令讲解 第一种用法:IFNOTERRORLEVELnumbercommand 第二种用法:IFNOTstring1=string2command 第三种用法:IFNOTEXISTfilenamecommand 第四种用法:IF增强的用法第七章DOS编程高级技巧 一、界面设计 二、ifelse条件语句 三、循环语句 四、子程序 五、用ftp命令实现自动下载 六、用7-ZIP实现命令行压缩和解压功能 七、调用VBScript程序 八、将批处理转化为可执行文件 九、时间延迟 十、模拟进度条 整理者:龙卷风 1、更正了所有的错别字,适当排版,增加条理性。 2、运行改善所有例子,并纠正了一些语法错误。 3、补充了一些不完全的地方。 4、第一章参考了网上许多教程汇编而成。 5、20080229补充了变量延迟的问题。 6、20080305修改了参数usebackq的说明 6、不断学习中,不断更新中。=第一章批处理基础第一节常用批处理内部命令简介批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD。这些命令统称批处理命令。小知识:可以在键盘上按下Ctrl+C组合键来强行终止一个批处理的执行过程。了解了大概意思后,我们正式开始学习.先看一个简单的例子!echooffecho"我的第一个批处理"pause把上面的3条命令保存为文件test.bat或者test.cmd然后执行,他就会在屏幕上显示以下二行话:我的第一个批处理请按任意键继续.这就是一个简单批处理文件了,这个批处理文件一共就用了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不同的是,:后的字符行在执行时不会回显,无论是否用echoon打开命令行回显状态,因为命令解释器不认为他是一个有效的命令行,就此点来看,rem在某些场合下将比:更为适用;另外,rem可以用于config.sys文件中。2、ECHO和打开回显或关闭回显功能,或显示消息。如果没有任何参数,echo命令将显示当前回显设置。字符放在命令前将关闭该命令回显,无论此时echo是否为打开状态。语法:echoon|offmessageecho. #此用法将显示一空行,相当于回车,非常有用。执行echooff将关闭回显,它后面的所有命令都不显示命令本身,只显示执行后的结果,除非执行echoon命令。执行echooff不但关闭以后命令的回显,连echooff命令本身也不显示了。通常以echooff作为批处理程序的首行。一般用ECHOMESSAGE来显示一个特定的消息。例:EchooffEchohelloPause运行显示:hello3、PAUSEPAUSE,玩游戏的人都知道,暂停的意思在这里就是停止系统命令的执行并显示下面的内容。例:PAUSE运行显示:请按任意键继续.要显示其他提示语,可以这样用:Echo其他提示语&pause>nul4、errorlevel程序返回码echo%errorlevel%每个命令运行结束,可以用这个命令行格式查看返回码用于判断刚才的命令是否执行成功默认值为0,一般命令执行出错会设errorlevel为15、title设置cmd窗口的标题title新标题 #可以看到cmd窗口的标题栏变了6、COLOR设置默认的控制台前景和背景颜色。COLORattr 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。例如:"COLORfc"在亮白色上产生亮红色7、mode配置系统设备配置系统设备。串行口: MODECOMm:BAUD=bPARITY=pDATA=dSTOP=s to=on|offxon=on|offodsr=on|off octs=on|offdtr=on|off|hs rts=on|off|hs|tgidsr=on|off设备状态: MODEdevice/STATUS打印重定向:MODELPTn:=COMm:选定代码页:MODECON:CPSELECT=yyy代码页状态:MODECON:CP/STATUS显示模式: MODECON:COLS=cLINES=n击键率: MODECON:RATE=rDELAY=d例:modeconcols=113lines=15&color9f此命令设置DOS窗口大小:15行,113列8、GOTO和:GOTO会点编程的朋友就会知道这是跳转的意思。在批处理中允许以“:XXX”来构建一个标号,然后用GOTOXXX跳转到标号:XXX处,然后执行标号后的命令。例:if%1=gotonoparmsif"%2"=""gotonoparms标签的名字可以随便起,但是最好是有意义的字符串啦,前加个冒号用来表示这个字符串是标签,goto命令就是根据这个冒号(:)来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。例:echooff:startset/avar+=1echo%var%if%var%leq3GOTOstartpause运行显示:12349、find在文件中搜索字符串。FIND/V/C/N/I/OFFLINE"string"drive:pathfilename. /V 显示所有未包含指定字符串的行。 /C 仅显示包含字符串的行数。 /N 显示行号。 /I 搜索字符串时忽略大小写。 /OFFLINE不要跳过具有脱机属性集的文件。 "string" 指定要搜索的文字串, drive:pathfilename 指定要搜索的文件。如果没有指定路径,FIND将搜索键入的或者由另一命令产生的文字。Find常和type命令结合使用Typedrive:pathfilename|find"string">tmpfile#挑选包含string的行Typedrive:pathfilename|find/v"string" #剔除文件中包含string的行Typedrive:pathfilename|find/c #显示文件行数以上用法将去除find命令自带的提示语(文件名提示)例:echooffecho111>test.txtecho222>>test.txtfind"111"test.txtdeltest.txtpause运行显示如下:-TEST.TXT111请按任意键继续.例:echooffecho111>test.txtecho222>>test.txttypetest.txt|find"111"deltest.txtpause运行显示如下:111请按任意键继续.10、start命令批处理中调用外部程序的命令(该外部程序在新窗口中运行,批处理程序继续往下执行,不理会外部程序的运行状况),如果直接运行外部程序则必须等外部程序完成后才继续执行剩下的指令例:startexplorerd:调用图形界面打开D盘11、assoc和ftype文件关联assoc设置'文件扩展名'关联,关联到'文件类型'ftype设置'文件类型'关联,关联到'执行程序和参数'当你双击一个.txt文件时,windows并不是根据.txt直接判断用notepad.exe打开而是先判断.txt属于txtfile'文件类型'再调用txtfile关联的命令行txtfile=%SystemRoot%system32NOTEPAD.EXE%1可以在"文件夹选项""文件类型"里修改这2种关联assoc #显示所有'文件扩展名'关联assoc.txt #显示.txt代表的'文件类型',结果显示.txt=txtfileassoc.doc #显示.doc代表的'文件类型',结果显示.doc=Word.Document.8assoc.exe #显示.exe代表的'文件类型',结果显示.exe=exefileftype #显示所有'文件类型'关联ftypeexefile #显示exefile类型关联的命令行,结果显示exefile="%1"%*assoc.txt=Word.Document.8设置.txt为word类型的文档,可以看到.txt文件的图标都变了assoc.txt=txtfile恢复.txt的正确关联ftypeexefile="%1"%*恢复exefile的正确关联如果该关联已经被破坏,可以运行,再输入这条命令12、pushd和popd切换当前目录echooffc:&cd&mdmp3 #在C:建立mp3文件夹mdd:mp4 #在D:建立mp4文件夹cd/dd:mp4 #更改当前目录为d:mp4pushdc:mp3 #保存当前目录,并切换当前目录为c:mp3popd #恢复当前目录为刚才保存的d:mp4一般用处不大,在当前目录名不确定时,会有点帮助。(dos编程中很有用)13、CALLCALL命令可以在批处理执行过程中调用另一个批处理,当另一个批处理执行完后,再继续执行原来的批处理CALLdrive:pathfilenamebatch-parameters调用的其它批处理程序。filename参数必须具有.bat或.cmd扩展名。CALL:labelarguments调用本文件内命令段,相当于子程序。被调用的命令段以标签:label开头以命令goto:eof结尾。另外,批脚本文本参数参照(%0、%1、等等)已如下改变: 批脚本里的%*指出所有的参数(如%1%2%3%4%5.) 批参数(%n)的替代已被增强。您可以使用以下语法:(看不明白的直接运行后面的例子) %1 -删除引号("),扩充%1 %f1 -将%1扩充到一个完全合格的路径名 %d1 -仅将%1扩充到一个驱动器号 %p1 -仅将%1扩充到一个路径 %n1 -仅将%1扩充到一个文件名 %x1 -仅将%1扩充到一个文件扩展名 %s1 -扩充的路径指含有短名 %a1 -将%1扩充到文件属性 %t1 -将%1扩充到文件的日期/时间 %z1 -将%1扩充到文件的大小 %$PATH:1-查找列在PATH环境变量的目录,并将%1 扩充到找到的第一个完全合格的名称。如果环境 变量名未被定义,或者没有找到文件,此组合键会 扩充到空字符串 可以组合修定符来取得多重结果: %dp1 -只将%1扩展到驱动器号和路径 %nx1 -只将%1扩展到文件名和扩展名 %dp$PATH:1-在列在PATH环境变量中的目录里查找%1, 并扩展到找到的第一个文件的驱动器号和路径。 %ftza1 -将%1扩展到类似DIR的输出行。 在上面的例子中,%1和PATH可以被其他有效数值替换。%语法被一个有效参数号码终止。%修定符不能跟%*使用注意:参数扩充时不理会参数所代表的文件是否真实存在,均以当前目录进行扩展要理解上面的知识,下面的例子很关键。例:echooffEcho产生一个临时文件>tmp.txtRem下行先保存当前目录,再将c:windows设为当前目录pushdc:windowsCall:subtmp.txtRem下行恢复前次的当前目录PopdCall:subtmp.txtpauseDeltmp.txt:subEcho删除引号:%1Echo扩充到路径:%f1Echo扩充到一个驱动器号:%d1Echo扩充到一个路径:%p1Echo扩充到一个文件名:%n1Echo扩充到一个文件扩展名:%x1Echo扩充的路径指含有短名:%s1Echo扩充到文件属性:%a1Echo扩充到文件的日期/时间:%t1Echo扩充到文件的大小:%z1Echo扩展到驱动器号和路径:%dp1Echo扩展到文件名和扩展名:%nx1Echo扩展到类似DIR的输出行:%ftza1Echo.Goto:eof14、shift更改批处理文件中可替换参数的位置。SHIFT/n如果命令扩展名被启用,SHIFT命令支持/n命令行开关;该命令行开关告诉命令从第n个参数开始移位;n介于零和八之间。例如: SHIFT/2会将%3移位到%2,将%4移位到%3,等等;并且不影响%0和%1。15、IFIF条件判断语句,语法格式如下:IFNOTERRORLEVELnumbercommandIFNOTstring1=string2commandIFNOTEXISTfilenamecommand下面逐一介绍,更详细的分析请看后面章节。(1)IFNOTERRORLEVELnumbercommandIFERRORLEVEL这个句子必须放在某一个命令的后面,执行命令后由IFERRORLEVEL来判断命令的返回值。Number的数字取值范围0255,判断时值的排列顺序应该由大到小。返回的值大于等于指定的值时,条件成立例:echooffdirc:rem退出代码为>=1就跳至标题1处执行,>=0就跳至标题0处执行IFERRORLEVEL1goto1IFERRORLEVEL0goto0Rem上面的两行不可交换位置,否则失败了也显示成功。:0echo命令执行成功!Rem程序执行完毕跳至标题exit处退出gotoexit:1echo命令执行失败!Rem程序执行完毕跳至标题exit处退出gotoexit:exitpause运行显示:命令执行成功!(2)IFNOTstring1=string2commandstring1和string2都为字符的数据,英文内字符的大小写将看作不同,这个条件中的等于号必须是两个(绝对相等的意思)条件相等后即执行后面的command检测当前变量的值做出判断,为了防止字符串中含有空格,可用以下格式ifNOTstring1=string2commandifNOTstring1=string2commandifNOT“string1”=“string2”command这种写法实际上将括号或引号当成字符串的一部分了,只要等号左右两边一致就行了,比如下面的写法就不行:ifstring1=string2command(3)IFNOTEXISTfilenamecommandEXISTfilename为文件或目录存在的意思echooffIFEXISTautoexec.batecho文件存在!IFnotEXISTautoexec.batecho文件不存在!这个批处理大家可以放在C盘和D盘分别执行,看看效果16、setlocal与变量延迟本条内容引用英雄出品的批处理教程:要想进阶,变量延迟是必过的一关!所以这一部分希望你能认真看。为了更好的说明问题,我们先引入一个例子。例1:echooffseta=4seta=5&echo%a%pause结果:4解说:为什么是4而不是5呢?在echo之前明明已经把变量a的值改成5了?让我们先了解一下批处理运行命令的机制:批处理读取命令时是按行读取的(另外例如for命令等,其后用一对圆括号闭合的所有语句也当作一行),在处理之前要完成必要的预处理工作,这其中就包括对该行命令中的变量赋值。我们现在分析一下例1,批处理在运行到这句“seta=5&echo%a%”之前,先把这一句整句读取并做了预处理对变量a赋了值,那么%a%当然就是4了!(没有为什么,批处理就是这样做的。)而为了能够感知环境变量的动态变化,批处理设计了变量延迟。简单来说,在读取了一条完整的语句之后,不立即对该行的变量赋值,而会在某个单条语句执行之前再进行赋值,也就是说“延迟”了对变量的赋值。那么如何开启变量延迟呢?变量延迟又需要注意什么呢?举个例子说明一下:例2:echooffsetlocalenabledelayedexpansionseta=4seta=5&echo!a!pause结果:5解说:启动了变量延迟,得到了正确答案。变量延迟的启动语句是“setlocalenabledelayedexpansion”,并且变量要用一对叹号“!”括起来(注意要用英文的叹号),否则就没有变量延迟的效果。分析一下例2,首先“setlocalenabledelayedexpansion”开启变量延迟,然后“seta=4”先给变量a赋值为4,“seta=5&echo!a!”这句是给变量a赋值为5并输出(由于启动了变量延迟,所以批处理能够感知到动态变化,即不是先给该行变量赋值,而是在运行过程中给变量赋值,因此此时a的值就是5了)。再举一个例子巩固一下。例3:echooffsetlocalenabledelayedexpansionfor/l%iin(1,1,5)do(seta=%iecho!a!)pause结果:12345解说:本例开启了变量延迟并用“!”将变量扩起来,因此得到我们预期的结果。如果不用变量延迟会出现什么结果呢?结果是这样的:ECHO处于关闭状态。ECHO处于关闭状态。ECHO处于关闭状态。ECHO处于关闭状态。ECHO处于关闭状态。即没有感知到for语句中的动态变化。第二节常用特殊符号 1、 命令行回显屏蔽符 2、% 批处理变量引导符 3、> 重定向符 4、>> 重定向符 5、<、>&、<&重定向符 6、| 命令管道符 7、 转义字符 8、& 组合命令 9、&&组合命令 10、| 组合命令 11、"" 字符串界定符 12、,逗号 13、;分号 14、()括号 15、!感叹号 16、批处理中可能会见到的其它特殊标记符:(略) CR(0D)命令行结束符 Escape(1B)ANSI转义字符引导符 Space(20)常用的参数界定符 Tab(09);=不常用的参数界定符 +COPY命令文件连接符 *?文件通配符 /参数开关引导符 :批处理标签引导符废话少说,开讲了1、 命令行回显屏蔽符这个字符在批处理中的意思是关闭当前行的回显。我们从前几课知道ECHOOFF可以关闭掉整个批处理命令的回显,但不能关掉ECHOOFF这个命令,现在我们在ECHOOFF这个命令前加个,就可以达到所有命令均不回显的要求2、% 批处理变量引导符这个百分号严格来说是算不上命令的,它只是批处理中的参数而已(多个%一起使用的情况除外,以后还将详细介绍)。引用变量用%var%,调用程序外部参数用%1至%9等等%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*为命令行传递给批处理的参数%0批处理文件本身,包括完整的路径和扩展名%1第一个参数%9第九个参数%*从第一个参数开始的所有参数参数%0具有特殊的功能,可以调用批处理自身,以达到批处理本身循环的目的,也可以复制文件自身等等。例:最简单的复制文件自身的方法copy%0d:wind.bat3、> 重定向符输出重定向命令这个字符的意思是传递并且覆盖,他所起的作用是将运行的结果传递到后面的范围(后边可以是文件,也可以是默认的系统控制台) 在NT系列命令行中,重定向的作用范围由整个命令行转变为单个命令语句,受到了命令分隔符&,&&,|和语句块的制约限制。比如:使用命令:echohello>1.txt将建立文件1.txt,内容为”hello“(注意行尾有一空格)使用命令:echohello>1.txt将建立文件1.txt,内容为”hello“(注意行尾没有空格)4、>> 重定向符输出重定向命令这个符号的作用和>有点类似,但他们的区别是>>是传递并在文件的末尾追加,而>是覆盖用法同上同样拿1.txt做例子使用命令:echohello>1.txtechoworld>>1.txt这时候1.txt内容如下:helloworld5、<、>&、<&重定向符这三个命令也是管道命令,但它们一般不常用,你只需要知道一下就ok了,当然如果想仔细研究的话,可以自己查一下资料。(本人已查过,网上也查不到相关资料)<,输入重定向命令,从文件中读入命令输入,而不是从键盘中读入。echooffecho2005-05-01>temp.txtdate<temp.txtdeltemp.txt这样就可以不等待输入直接修改当前日期>&,将一个句柄的输出写入到另一个句柄的输入中。<&,刚好和>&相反,从一个句柄读取输入并将其写入到另一个句柄输出中。常用句柄:0、1、2,未定义句柄:391>nul表示禁止输出正确的信息2>nul表示禁止输出错误信息。其中的1与2都是代表某个数据流输入输出的地址(NTCMD称之为句柄,MSDOS称之为设备)。句柄0:标准输入stdin,键盘输入句柄1:标准输出stdout,输出到命令提示符窗口(console,代码为CON)句柄2:标准错误stderr,输出到命令提示符窗口(console,代码为CON)其中的stdin可被<重定向,stdout可被>、>>重定向,而stderr在DOS下不可直接重定向,只有通过ctty或其它命令将系统控制权转交给其它设备的方式,来间接完成。6、| 命令管道符格式:第一条命令|第二条命令|第三条命令.将第一条命令的结果作为第二条命令的参数来使用,记得在unix中这种方式很常见。例如:dirc:|find"txt"以上命令是:查找C:所有,并发现TXT字符串。FIND的功能请用FIND/?自行查看在不使format的自动格式化参数时,我是这样来自动格式化A盘的echoy|formata:/s/q/v:system用过format的都知道,再格盘时要输入y来确认是否格盘,这个命令前加上echoy并用|字符来将echoy的结果传给format命令从而达到自动输入y的目的(这条命令有危害性,测试时请慎重)7、 转义字符是对特殊符号<,>,&的前导字符,在命令中他将以上3个符号的特殊功能去掉,仅仅只把他们当成符号而不使用他们的特殊意义。比如echotest>1.txt结果则是:test>1.txt他没有追加在1.txt里,呵呵。只是显示了出来另外,此转义字符还可以用作续行符号。举个简单的例子:echooffecho英雄是好男人pause不用多说,自己试一下就明白了。8、& 组合命令语法:第一条命令&第二条命令&第三条命令.&、&&、|为组合命令,顾名思义,就是可以把多个命令组合起来当一个命令来执行。这在批处理脚本里是允许的,而且用的非常广泛。因为批处理认行不认命令数目。这个符号允许在一行中使用2个以上不同的命令,当第一个命令执行失败了,也不影响后边的命令执行。这里&两边的命令是顺序执行的,从前往后执行。比如:dirz:&diry:&dirc:以上命令会连续显示z,y,c盘的内容,不理会该盘是否存在9、&&组合命令语法:第一条命令&&第二条命令&&第三条命令.用这种方法可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令这个命令和上边的类似,但区别是,第一个命令失败时,后边的命令也不会执行dirz:&&diry:&&dirc:10、| 组合命令语法:第一条命令|第二条命令|第三条命令.用这种方法可以同时执行多条命令,当一条命令失败后才执行第二条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;提示:组合命令和重定向命令一起使用必须注意优先级管道命令的优先级高于重定向命令,重定向命令的优先级高于组合命令问题:把C盘和D盘的文件和文件夹列出到a.txt文件中。你将如何来搞定这道题?有朋友说,这还不是很easy的问题吗?同时执行两个dir,然后把得到的结果>到a.txt里就ok了嘛,看例:dirc:&&dird:>a.txt仔细研究一下这句执行后的结果,看看是否能达到题目的要求!错了!这样执行后a.txt里只有D盘的信息!为什么?就因为这里&&命令和>命令不能同时出现一个句子里(批处理把一行看成一个句子)!组合命令&&的优先级没有管道命令>的优先级高(自己总结的,不妥的地方请指正)!所以这句在执行时将本行分成这两部分:dirc:和dird:>a.txt,而并不是如你想的这两部分:dirc:&&dird:和>a.txt。要使用组合命令&&达到题目的要求,必须得这么写:dirc:>a.txt&&dird:>>a.txt这样,依据优先级高低,DOS将把这句话分成以下两部分:dirc:>a.txt和dird:>>a.txt。例十八中的几句的差别比较特殊,值得好好研究体会一下。当然这里还可以利用&命令(自己想一下道理哦):dirc:>a.txt&dird:>>a.txt11、"" 字符串界定符双引号允许在字符串中包含空格,进入一个特殊目录可以用如下方法cd"programfiles"cdprogra1cdpro*以上三种方法都可以进入programfiles这个目录12、,逗号逗号相当于空格,在某些情况下“,”可以用来当做空格使比如dir,c:13、;分号分号,当命令相同时,可以将不同目标用;来隔离,但执行效果不变,如执行过程中发生错误,则只返回错误报告,但程序仍会执行。(有人说不会继续执行,其实测试一下就知道了)比如:dirc:;d:;e:;z:以上命令相当于dirc:dird:dire:dirf:如果其中z盘不存在,运行显示:系统找不到指定的路径。然后终止命令的执行。例:dirc:;d:;e:1.txt以上命令相当于dirc:dird:dire:1.txt其中文件e:1.txt不存在,但e盘存在,有错误提示,但命令仍会执行。为什么?如果目标路径不存在,则终止执行;如果路径存在,文件不存在,则继续执行。就说这些了!各位有什么意见请回贴!有什么疑问请到BAT交流区发贴!下一节改进!14、()括号小括号在批处理编程中有特殊的作用,左右括号必须成对使用,括号中可以包括多行命令,这些命令将被看成一个整体,视为一条命令行。 括号在for语句和if语句中常见,用来嵌套使用循环或条件语句,其实括号()也可以单独使用,请看例子。例:命令:echo1&echo2&echo3可以写成:(echo1echo2echo3)上面两种写法效果一样,这两种写法都被视为是一条命令行。注意:这种多条命令被视为一条命令行时,如果其中有变量,就涉及到变量延迟的问题。15、!感叹号没啥说的,在变量延迟问题中,用来表示变量,即%var%应该表示为!var!,请看前面的setlocal命令介绍。累了,换换思维,有兴趣的可以学一段古文化:三字经第一节,可谓人人皆知。【原文】人(rén)之(zh)初(ch),性(xìng)本(bn)善(shàn),性(xìng)相(xing)近(jìn),习(xí)相(xing)远(yun)。苟(gu)不(bú)教(jiào),性(xìng)乃(ni)迁(qin),教(jiào)之(zh)道(dào),贵(guì)以(y)专(zhun)。【字词义解释】(1)之:的。(2)初:初生;刚开始的时候。(3)性:本性;天性。(4)本:本来。(5)善:善良、好的。(6)相:相当。(7)近:接近。(8)习:学习、后天的习惯。(9)远:差别大。(10)苟:如果。(11)教:教导。(12)乃:就会。(13)迁:改变。(14)道:方法。(15)贵:注重。(16)专:专心。【译文参考】人刚生下来的时候,本性中有善的一面。这时候善良的本性,大致都很相近,没有多大的差别。等到长大以后,因各人的环境不同,所学习的也不同;在好的环境人就会变好,在不好的环境人就容易学坏,于是性情开始有了差别。假如在这个时候,不给他适当的教导,学了种种不良的习惯,他原本善良的本性,就会渐渐变坏;而教导的方法,最重要的就是必须专心一致,不可边做边停,才能使他有完整的学习。第二章DO