第一节常用批处理内部命令简介批处理本质:是一堆DOS命令按一定顺序排列而形成的集合。批处理的作用就是自动的连续执行多条命令,批处理,也称为批处理脚本,英文译为BATCH。批处理有一个很鲜明的特点:使用方便、灵活,功能强大,自动化程度高。扩展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批处理文件。一个良好的习惯是在硬盘上建立一个bat或者batch目录(例如C:\\BATCH),然后将所有你编写的批处理文件放到该目录中。首先,批处理文件是一个文本文件,文件的每一行都是一条DOS命令。其次,批处理文件是一种简单的程序,通过(if)和制语句(goto)来控制命令运行的流程。第三,编写好的批处理文件都相当于一个DOS的外部命令,可以在任何位置调用运行。第四,在DOS和Win9x/Me系统下,C:\\AUTOEXEC.BAT是启动计算机自动运行的。介绍命令
1、REM和::REM为注释命令,可以回显,::不回显,简洁有效亦可加快运行速度。第一、任何以冒号开头的字符行,在批处理中都被视作标号,而直接忽略其后的所有内容。有效标号:冒号后紧跟一个以字母数字开头的字符串,goto语句可以识别。无效标号:冒号后紧跟一个非字母数字的一个特殊符号,goto无法识别的标号,可以起到注释作用,所以”::”常被用作注释符号,其实:+也可起注释作用。第二、rem在某些场合下将比::更为适用;另外,rem可以用于config.sys文件中。2、ECHO和@@EchooffEchohelloPause运行显示:hello3、PAUSEEcho其他提示语&pause>nul(Echo其他提示语&pause>>nul效果一样)或者写成以下形式其功能也一样(两行):Echo其他提示语pause>(>>)nul4、errorlevel程序返回码echo%errorlevel%命令行格式查看返回码判断命令是否成,成功返回“0”5、title设置cmd窗口的标题:title新标题6、COLOR设置默认的控制台前景和背景颜色。COLOR[attr]第一个为背景,第二个则为前景。7、mode配置系统设备helpmode>a.txt8、GOTO和:if{%1}=={}gotonoparms;if\"%2\"==\"\"gotonoparms@echooff运行显示:1:start2set/avar+=13echo%var%4if%var%leq3GOTOstartpause9、find在文件中搜索字符串。如果没有指定路径FIND将搜索键入的或者由另一命令产生批处理命令入门指导
1的文字。Find常和type命令结合使用Type[drive:][path]filename|find\"string\"[>tmpfile]#挑选包含string的行Type[drive:][path]filename|find/v\"string\"#剔除文件中包含string的行Type[drive:][path]filename|find/c#显示文件行数运行显示如下:例1:@echooffecho111>test.txtecho222>>test.txtfind“111”test.txtdeltest.txtpause运行结果如下:----------TEST.TXT111请按任意键继111例2:请按任意键继续...@echooffecho111>test.txtecho222>>test.txttypetest.txt|find\"111\"deltest.txtpause10、start命令:批处理中调用外部程序的命令;如果直接运行外部程序则必须等外部程序完成后才继续执行剩下的指令startexplorerd:\\调用图形界面打开D盘(cdd:\\)11、assoc和ftype文件关联assoc设置'文件扩展名'关联,关联到'文件类型'ftype设置'文件类型'关联,关联到'执行程序和参数'当你双击一个.txt文件时,windows并不是根据.txt直接判断用notepad.exe打开而是先判断.txt属于txtfile'文件类型'再调用txtfile关联的命令行txtfile=%SystemRoot%\\system32\\NOTEPAD.EXE%1可以在\"文件夹选项\"→\"文件类型\"里修改这2种关联assoc显示所有'文件扩展名'关联;assoc.txt[#]显示.txt代表的'文件类型。ftype显示所有'文件类型'关联;ftypeexefile[#]显示exefile类型关联的命令行assoc.txt=Word.Document.8可以看到.txt文件的图标都变了assoc.txt=txtfile恢复.txt的正确关联;ftypeexefile=\"%1\"%*恢复exefile的正确关联如果该关联已经被破坏,可以运行command.com,再输入这条命令12、pushd和popd切换当前目录@echooffc:&cd\\&mdmp3::在C:\\建立mp3文件夹mdd:\\mp4::在D:\\建立mp4文件夹cddd:\\mp4::更改当前目录为d:\\mp4pushdc:\\mp3::保存当前目录,并切换当前目录为c:\\mp3popd::恢复当前目录为刚才保存的d:\\mp4pause13、CALLCALL[drive:][path]filename[batch-parameters]调用的其它批处理程序。filename参数必须具有.bat或.cmd扩展名。CALL:labelarguments调用本文件内命令段,相当于子程序。被调用的命令段以标签:label开头以命令goto:eof结尾。批脚本里的%*指出所有的参数(如%1%2%3%4%5...)参数扩充时不理会参数所代表的文件是否真实存在,均以当前目录进行扩展@echooffEcho产生一个临时文件>tmp.txtRem下行先保存当前目录,再将c:\\windows设为当前目录pushdc:\\windowsCall:subtmp.txtRem下行恢复前次的当前目录批处理命令入门指导
2PopdCall:subtmp.txtpauseDeltmp.txt:subEcho删除引号:%~1Echo扩充到路径:%~f1Echo扩充到一个驱动器号:%~d1Echo扩充到一个路径:%~p1Echo扩充到一个文件名:%~n1Echo扩充到一个文件扩展名:%~x1Echo扩充的路径指含有短名:%~s1Echo扩充到文件属性:%~a1Echo扩充到文件的日期/时间:%~t1Echo扩充到文件的大小:%~z1Echo扩展到驱动器号和路径:%~dp1Echo扩展到文件名和扩展名:%~nx1Echo扩展到类似DIR的输出行:%~ftza1Echo.Goto:eof14、shift更改批处理文件中可替换参数的位置。SHIFT[/n]:命令从第n个参数开始移位;n介于零和八之间。例如:SHIFT/2会将%3移位到%2,将%4移位到%3,等等;并且不影响%0和%1。15、IF(1)IF[NOT]ERRORLEVELnumbercommandIFERRORLEVEL执行命令后由IFERRORLEVEL来判断命令的返回值。Number的数字范围0~255,判断时值的排列顺序应该由大到小。返回的值大于等于指定的值时,条件成立。例:@echooffdirc:rem退出代码为>=1就跳至标题1处执行,>=0就跳至标题0处执行IFERRORLEVEL1goto1IFERRORLEVEL0goto0Rem上面的两行不可交换位置,否则失败了也显示成功。:0echo命令执行成功!Rem程序执行完毕跳至标题exit处退出gotoexit:1echo命令执行失败!Rem程序执行完毕跳至标题exit处退出gotoexit:exitpause批处理命令入门指导
3(2)IF[NOT]string1==string2commandstring1和string2都为字符的数据。(绝对相等的意思)条件相等后即执行后面的command检测当前变量的值做出判断,为防止字符串中有空格,可用以下格式if[NOT]{string1}=={string2}command;if[NOT][string1]==[string2]commandif[NOT]“string1”==“string2”command这种写法实际上将括号或引号当成字符串的一部分了结果:(3)IF[NOT]EXISTfilenamecommand1EXISTfilename为文件或目录存在的意思2echooff3IFEXISTautoexec.batecho文件存在!4IFnotEXISTautoexec.batecho文件不存在!516、setlocal与变量延迟setlocalenabledelayedexpansion例1:例2:例3:@echooff@echooff@echooffseta=4setlocalsetlocalenabledelayedexpansionseta=5&echo%a%enabledelayedexpansionfor/l%%iin(1,1,5)do(pauserem固定格式seta=%%i结果:4seta=4echo!a!)seta=5&echo!a!pause结果:5pause第二节常用特殊符号管道命令(优先级)>重定向命令>组合命令1、@命令行回显屏蔽符;2、%批处理变量引导符;3、>重定向符;4、>>重定向符;5、<、>&、<&重定向符;6、|命令管道符;7、^转义字符;8、&组合命令;9、&&组合命令;10、||组合命令;11、\"\"字符串界定符;12、,逗号;13、;分号;14、()括号;15、!感叹号(变量延迟的启动语句是“setlocalenabledelayedexpansion”)16、批处理中可能会见到的其它特殊标记符:CR(0D)命令行结束符;Escape(1B)ANSI转义字符引导符;Space(20)常用的参数界定符Tab(09);=不常用的参数界定符;+COPY命令文件连接符;*?文件通配符;/参数开关引导符;批处理标签引导符。1、@命令行回显屏蔽符2、%批处理变量引导符:它只是批处理中的参数而已,引用变量用%var%,调用程序外部参数用%1至%9等等,%0%1%2%3%4%5%6%7%8%9%*为命令行传递给批处理的参数%0批处理文件本身,包括完整的路径和扩展名;%1第一个参数;%9第九个参数;%*从第一个参数开始的所有参数;参数%0具有特殊的功能,可以调用批处理自身,以达到批处理本身循环的目的,也可以复制文件自身等等。例:最简单的复制文件自身的方法copy%0d:\\wind.bat3、>重定向符4、>>重定向符5、<、>&、<&重定向符”<”输入重定向命令从文件中读取命令输入,而不是从键盘中读入。@echooffecho2005-05-01>temp.txt这样就可以不等待输入直接修改当前日期date 514、()括号这些命令将被看成一个整体,视为一条命令行。例:命令:echo1&echo2&echo3可以写成:(echo1echo2echo3)注意:这种多条命令被视为一条命令行时,如果其中有变量,就涉及到变量延迟的问题。15、!感叹号FOR专题讲座 FOR参数%%变量名IN(相关文件或命令)DO执行的命令参数:FOR有4个参数/d/l/r/f他们的作用我在下面用例子解释%%变量名:这个变量名他们区分大小写。FOR%%variableIN(set)DOcommand[command-parameters]%%variable指定一个单一字母可替换的参数。(set)指定一个或一组文件。可以使用通配符。command指定对每个文件执行的命令。command-parameters为特定命令指定参数或命令行开关。一、参数/d只能显示当前目录下的目录名字FOR/D%%variableIN(set)DOcommand[command-parameters]@echoofffor/d%%iin(c:\\*)doecho%%ipause运行会把C盘根目录下的全部目录名字打印出来,而文件名字一个也不显示!在来一个,比如我们要把当前路径下文件夹的名字只有1-3个字母的打出来@echoofffor/d%%iin(???)doecho%%ipause这样的话如果你当前目录下有目录名字只有1-3个字母的,就会显示出来,没有就不显示了@echoofffor/d%%iin(window?)doecho%%ipause保存到C盘下执行.显示:windows二、参数/RFOR/R[[drive:]path]%variableIN(set)DOcommand[command-parameters]检查以[drive:]path为根的目录树,指向每个目录中的FOR语句。如果在/R后没有指定目录,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。例2:例1:@echooff@echoofffor/r%%iin(*.exe)do@echofor/rc:\\%%iin(*.exe)doecho%%i%%ipausepause以当前目录为搜索路径:目录和他下面的子目录的全部EXE文件列出来!!!批处理命令入门指导 6例3:@echoofffor/rc:\\%%iin(boot.ini)doecho%%ipause运行本例发现枚举了c盘所有目录,为了只列举boot.ini存在的目录,可改成下面这样:@echoofffor/rc:\\%%iin(boot.ini)doifexist%%iecho%%i用这条命令搜索文件真pause不错。。。。。。三、参数/LFOR/L%variableIN(start,step,end)DOcommand[command-parameters]该集表示以增量形式从开始到结束的一个数字序列。@echoofffor/l%%iin(1,1,5)do@echo%%ipause保存执行看效果,他会打印从12345这样5个数字@echoofffor/l%%iin(1,1,5)dostartcmdpause当然我们也可以把那个startcmd改成md%%i这样就会建立指定个目录了!!!名字为1-6553、参数/F\\迭代及文件解析在没有使用令牌选项时,/F将只检查第一个令牌。默认情况下,/F传递每个文件每一行的第一个空白分隔符号。跳过空行\"options\"包括一个或多个FOR/F[\"options\"]%variableIN(file-set)DOcommand[command-parameters]FOR/F[\"options\"]%variableIN(\"string\")DOcommand[command-parameters]FOR/F[\"options\"]%variableIN('command')DOcommand[command-parameters]例1:@echooffrem首先建立临时文件test.txtecho;注释行,这是临时文件,用完删除>test.txtecho11段12段13段14段15段16段>>test.txtecho21段,22段,23段,24段,25段,26段>>test.txtecho31段-32段-33段-34段-35段-36段>>test.txtFOR/F\"eol=;tokens=1,3*delims=,-\"%%iin(test.txt)doecho%%i%%j%%kPauseDeltest.txt运行显示结果:11段13段14段15段16段21段23段24段,25段,26段31段33段34段-35段-36段请按任意键继续...eol=;分号开头的行为注释行tokens=1,3*将每行第1段,第3段和剩余字段分别赋予变量%%i,%%j,%%kdelims=,-(减号后有一空格)以逗号减号和空格为分隔符,空格必须放在最后For命令例2:****************************************@echooff批处理命令入门指导 7FOR/F\"eol=delims=\"%%iin(test.txt)doecho%%iPause运行将显示test.txt全部内容,包括注释行。For命令例3:****************************************另外/F参数还可以以输出命令的结果看这个例子@echooffFOR/F\"delims=\"%%iin('netuser')do@echo%%ipause这样你本机全部帐号名字就出来了把扩号内的内容用两个单引号引起来就表示那个当命令执行,FOR会返回命令的每行结果,加那个\"delims=\"是为了让空格的行能整行显示出来,不加就是只显示空格左边一列!比如:FOR/F%%zIN('set')DO@echo%%z这里我们代入的变量名是z那么我们就要把那个I改成z,例如%~fI改为%~fz一、~I删除任何引号(\"),扩展%I首先建立临时文件temp.txt,内容如下\"1111\"2222\"3333\"\"4444\"44\"55\"55\"55可建立个BAT文件代码如下:@echooffecho^\"1111>temp.txtecho\"2222\">>temp.txtecho3333^\">>temp.txtecho\"4444\"44>>temp.txtecho^\"55\"55\"55>>temp.txtrem上面建立临时文件,注意不成对的引号要加转义字符^,重定向符号前不要留空格FOR/F\"delims=\"%%iIN(temp.txt)DOecho%%~ipausedeltemp.txt执行后,我们看CMD的回显如下:1111#字符串前的引号被删除了2222#字符串首尾的引号都被删除了3333\"#字符串前无引号,后面的引号保留4444\"44#字符串前面的引号删除了,而中间的引号保留55\"55\"55#字符串前面的引号删除了,而中间的引号保留请按任意键继续....和之前temp.txt中的内容对比一下,我们会发现第1、2、5行的引号都消失了,这就是删除引号~i的作用了!无头不删,有头连尾删,无尾则删首。1、若字符串首尾同时存在引号,则删除首尾的引号;2、若字符串尾不存在引号,则删除字符串首的引号;3、如果字符串中间存在引号,或者只在尾部存在引号,则不删除。二、%~fI-将%I扩展到一个完全合格的路径名看例子:批处理命令入门指导 8FOR/F\"delims==\"%%iIN('dir/b')DO@echo%%~fipause执行后显示内容如下C:\\DocumentsandSettings\\Administrator\\桌面\est.batC:\\DocumentsandSettings\\Administrator\\桌面\est.vbs当我把代码中的%%~fi直接改成%%iFOR/F\"delims==\"%%iIN('dir/b')DO@echo%%ipause执行后就会显示以下内容:test.battest.vbs也就是如果%i变量的内容是一个文件名的话,他就会把这个文件所在的绝对路径打印出来,而不只单单打印一个文件名三、%~dI-仅将%I扩展到一个驱动器号FOR/F\"delims==\"%%iIN('dir/b')DO@echo%%~dipause执行后我CMD里显示如下C:C:如果变量%%i的内容是一个文件或者目录名,会把这文件或者目录所在的盘符号打印出来!四、%~pI仅将%I扩展到一个路径‘这个用法和上面一样,他只打印路径不打印文件名字FOR/F\"delims==\"%%iIN('dir/b')DO@echo%%~pipause五、%~nI-仅将%I扩展到一个文件名;只打印文件名字FOR/F\"delims==\"%%iIN('dir/b')DO@echo%%~nipause六、%~xI-仅将%I扩展到一个文件扩展名;只打印文件的扩展名FOR/F\"delims==\"%%iIN('dir/b')DO@echo%%~xipause七、%~sI-扩展的路径只含有短名;打印绝对短文件名FOR/F\"delims==\"%%iIN('dir/b')DO@echo%%~sipause八、%~aI-将%I扩展到文件的文件属性;打印文件的属性FOR/F\"delims==\"%%iIN('dir/b')DO@echo%%~aipause九、%~tI-将%I扩展到文件的日期/时间;打印文件建立的日期FOR/F\"delims==\"%%iIN('dir/b')DO@echo%%~tipause十、%~zI-将%I扩展到文件的大小;打印文件的大小FOR/F\"delims==\"%%iIN('dir/b')DO@echo%%~zipause上面例子中的\"delims==\"可以改为\"delims=\",即不要分隔符十一、%~$PATH:I查找列在路径环境变量的目录,并将%I扩展到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩展到空字符串把这些批处理命令入门指导 9代码保存为批处理,放在桌面。在PATH指的路径里搜索notepad.exe文件。@echooffFOR/F\"delims=\"%%iIN(“notepad.exe”)DOecho%%~$PATH:ipause一、系统变量%ALLUSERSPROFILE%本地返回“所有用户”配置文件的位置。%APPDATA%本地返回默认情况下应用程序存储数据的位置。%CD%本地返回当前目录字符串。%CMDCMDLINE%本地返回用来启动当前的Cmd.exe的准确命令行。%CMDEXTVERSION%系统返回当前的“命令处理程序扩展”的版本号。%COMPUTERNAME%系统返回计算机的名称。%COMSPEC%系统返回命令行解释器可执行程序的准确路径。%DATE%系统返回当前日期。使用与date/t命令相同的格式由Cmd.exe生成。%ERRORLEVEL%系统返回上一条命令的错误代码。通常用非零值表示错误。%HOMEDRIVE%系统返回连接到用户主目录的本地工作站驱动器号。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。%HOMEPATH%系统返回用户主目录的完整路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。%HOMESHARE%系统返回用户的共享主目录的网络路径基主目录值而设置用户主目录是在“本地用户和组”中指定的。%LOGONSERVER%本地返回验证当前登录会话的域控制器的名称。%NUMBER_OF_PROCESSORS%系统指定安装在计算机上的处理器的数目。%OS%系统返回操作系统名称。Windows2000显示其操作系统为Windows_NT。%PATH%系统指定可执行文件的搜索路径。%PATHEXT%系统返回操作系统认为可执行的文件扩展名的列表。%PROCESSOR_ARCHITECTURE%系统返回处理器的芯片体系结构。值:x86或IA基于Itanium%PROCESSOR_IDENTFIER%系统返回处理器说明。%PROCESSOR_LEVEL%系统返回计算机上安装的处理器的型号。%PROCESSOR_REVISION%系统返回处理器的版本号。%PROMPT%本地返回当前解释程序的命令提示符设置。由Cmd.exe生成。%RANDOM%系统返回0到32767之间的任意十进制数字。由Cmd.exe生成。%SYSTEMDRIVE%系统返回包含Windowsserveroperatingsystem根目录(即系统根目录)的驱动器。%SYSTEMROOT%系统返回Windowsserveroperatingsystem根目录的位置。%TEMP%和%TMP%系统和用户返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要TEMP,而其他应用程序则需要TMP。%TIME%系统返回当前时间。使用与time/t命令相同的格式。由Cmd.exe生成。有关time命令的详细信息,请参阅Time。%USERDOMAIN%本地返回包含用户帐户的域的名称。%USERNAME%本地返回当前登录的用户的名称。%USERPROFILE%本地返回当前用户的配置文件的位置。%WINDIR%系统返回操作系统目录的位置。这么多系统变量,我们如何知道他的值是什么呢?批处理命令入门指导 10在CMD里输入echo%WINDIR%这样就能显示一个变量的值了!举个实际例子,比如我们要复制文件到当前帐号的启动目录里就可以这样copyd:\\1.bat\"%USERPROFILE%\\「开始」菜单\\程序\\启动\\\"%USERNAME%本地返回当前登录的用户的名称。注意有空格的目录要用引号引起来另外还有一些系统变量,他们是代表一个意思,或者一个操作!www.cmdos.net他们分别是%0%1%2%3%4%5......一直到%9还有一个%*%0这个有点特殊,有几层意思,先讲%1-%9的意思.%1返回批处理的第一个参数%2返回批处理的第二个参数%3-%9依此推类我们看这个例子,把下面的代码保存为test.BAT然后放到C盘下@echooffecho%1%2%3%4echo%1echo%2echo%3echo%4进入CMD,输入cdc:\\然后输入test.bat我是第一个参数我是第二个参数我是第三个参数我是第四个参数注意中间的空格,我们会看到这样的结果:我是第一个参数我是第二个参数我是第三个参数我是第四个参数我是第一个参数我是第二个参数我是第三个参数我是第四个参数对比下代码,%1就是”我是第一个参数”%2就是”我是第二个参数”这些%1和%9可以让批处理也能带参数运行,大大提高批处理功能!例:@echooffecho%*同样保存为test.bat放到C盘进入CMD,输入cdc:\\然后输入test.bat我是第一个参数我是第二个参数我是第三个参数我是第四个参数可以看到他一次把全部参数都显示出来了%0这个不是返回参数的值了,他有两层意思!第一层意思:返回批处理所在绝对路径@echooffecho%0pause保存为test.BAT放在桌面运行,会显示如下结果\"C:\\DocumentsandSettings\\Administrator\\桌面\est.bat\"他把当前批处理执行的所在路经打印出来了,返回批处理所在绝对路径的意思。第二层意思:无限循环执行BAT例子:批处理命令入门指导 11@echooffnetuser%0二、自定义变量1、用set命令设置自定义变量显示、设置或删除cmd.exe环境变量。SET[variable=[string]]variable指定环境变量名;string指定要指派给变量的一系列字符串。要显示当前环境变量,键入不带参数的SETSET;命令不允许变量名含有等号。例子:@echooffsetvar=我是值echo%var%pause请看setvar=我是值,这就是BAT直接在批处理中设置变量的方法!在批处理中我们要引用这个变就把var变量名用两个%(百分号)扩起来,如%var%现在我就来说说SET的这种语法,只需要加一个\"/P\"参数就可以了。SET/Pvariable=[promptString]@echooffset/pvar=请输入变量的值:echo您输入了%var%~_~pauseset/p是命令语法var是变量名=号右边的\"请输入变量的值:\"运行后,我们在提示语后面直接输入1,就会显示一行您输入了1~_~2、用set命令进行简单计算语法:SET/Aexpression/A命令行开关指定等号右边的字符串为被评估的数字表达式。注意:DOS计算只能精确到整数例:@echooffset/pinput=请输入计算表达式:set/avar=%input%echo计算结果:%input%=%var%pause请输入计算表达式:1+9+20+30-10计算结果:1+9+20+30-10=50上面的计算过程显示,DOS计算只能精确到32位,这个32位是指二进制32位,其中最高位为符号位(0为正,1为负),低位31位为数值。31个1换成十进制为21474837,所以DOS计算的有效值范围是-21474837至21474837,超出该数值范围时计算出错。运行set/aa=1+1,b=2+1,c=3+1后会显示一个4有时候我们需要直接在原变量进行加减操作就可以用这种语法set/avar+=1这样的语法对应原始语法就是set/avar=%var%+1set/avar*=2对于\"逻辑或取余操作符\我们需要把他们用双引号引起来,也可以用转义字符^set/avar=1\"&\"1这样结果就显示出来了,其他逻辑或取余操作符用法set/avar=1\"+\"1异运算批处理命令入门指导 12set/avar=1\"%\"1取模运算set/avar=3\"<<\"2左移位运算,3的二进制为11,左移2位为1100。set/avar=4\">>\"2右移位运算,4的二进制为100,右移动2位为1,结果为1这些符号也可以用&=^=|=<<=>>=这样的简单用法如set/avar\"&=\"1等于set/avar=%var%\"&\"1注意引号思考题:求2的n次方@echooffset/pn=请输入2的几次方:set/anum=1^<^ 14netuserIF%ERRORLEVEL%==0echonetuser执行成功了!pause这是个简单判断上条命令是否执行成功.www.cmdos.net这只是一般的情况,实际上,errorlevel返回值可以在0~255之间。比如,xcopy默认的errorlevel值就有5个,分别表示5种执行状态:0文件复制没有错误。1、iferrorlevel2echo;2、用户按CTRL+C终止了xcopy;3、出现了初始化错误。没有足够的内存或磁盘空间或命令行上输入了无效的驱动器名称或语法;4、出现了磁盘写入错误。iferrorlevel5echo出现了磁盘写入错误iferrorlevel4echo出现了初始化错误iferrorlevel2echo用户按CTRL+C终止了xcopyiferrorlevel1echoiferrorlevel2echoiferrorlevel0echo文件复制没有错误。例1@echooffnetusertestIF%ERRORLEVEL%==1echonetuser执行失败了!pause例2@echooffset/pvar=随便输入个命令:%var%if%ERRORLEVEL%==0gotoyesgotono:yesecho!var!执行成功了pauseexit:noecho基本上执行失败了..pause在来一个简化版的@echooffset/pvar=随便输入个命令:%var%if%ERRORLEVEL%==0(echo%var%执行成功了)ELSEecho%var%执行失败了!pause当然我门还可以把ifelse这样的语句分成几行写出来,使他看上去好看点...@echooffset/pvar=随便输入个命令:%var%if%ERRORLEVEL%==0(echo!var!执行成功了批处理命令入门指导 15)ELSE(echo基本上执行失败了..)pause第二种用法:IF[NOT]string1==string2command例子@echooffset/pvar=请输入第一个比较字符:set/pvar2=请输入第二个比较字符:if%var%==%var2%(echo我们相等)ELSEecho我们不相等pause下面的例子打上了括号是为了区别是否有空格。@echooffset/pvar=请输入第一个比较字符:set/pvar2=请输入第二个比较字符(多输入个空格试试):if\"%var%\"==\"%var2%\"(echo我们相等)ELSEecho我们不相等pause第三种用法:IF[NOT]EXISTfilenamecommand例子@echooffifexist\"c:\est\"(echo存在文件)ELSEecho不存在文件pause第四种用法:IF增强的用法IF[/i]string1compare-opstring2command/i的意思是不比较时不区分大小写。IFCMDEXTVERSIONnumbercommandIFDEFINEDvariablecommandCMDEXTVERSION条件的作用跟ERRORLEVEL的一样,除了它是在跟与命令扩展名有关联的内部版本号比较。第一个版本是1。每次对命令扩展名有相当大的增强时,版本号会增加一个。命令扩展名被停用时CMDEXTVERSION条件不是真的。如果已定义环境变量,DEFINED条件的作用跟EXISTS的一样,除了它取得一个环境变量,返回的结果是true。@echooffifa==A(echo我们相等)ELSEecho我们不相等pause执行后会显示:我们不相等@echooffif/ia==A(echo我们相等)ELSEecho我们不相等pause我们相等EQU-等于;NEQ-不等于;LSS-小于;LEQ-小于或等于;GTR-大于;GEQ-大于或等于@echooffset/pvar=请输入一个数字:if%var%LEQ4(echo我小于等于4)ELSEecho我不小于等于4pause三、交互界面设计批处理命令入门指导 16@echooff&titleDOS资源站www.cmdos.netclstitle终极多功能修复:menuclscolor0Aecho.echo==============================echo请选择要进行的操作,然后按回车echo==============================echo.echo1.网络修复及上网相关设置,修复IE,自定义屏蔽网站echo.echo2.病毒专杀工具,端口关闭工具,关闭自动播放echo.echo3.清除所有多余的自启动项目,修复系统错误echo.echo4.清理系统垃圾,提高启动速度echo.echoQ.退出echo.echo.:chosetchoice=set/pchoice=请选择:IFNOT\"%choice%\"==\"\"SETchoice=%choice:~0,1%if/i\"%choice%\"==\"1\"gotoipif/i\"%choice%\"==\"2\"gotosetsaveif/i\"%choice%\"==\"3\"gotokaijiif/i\"%choice%\"==\"4\"gotocleanif/i\"%choice%\"==\"Q\"gotoenddecho选择无效,请重新输入echo.gotocho二、if…else…条件语句IF[NOT]ERRORLEVELnumbercommandIF[NOT]string1==string2commandIF[NOT]EXISTfilenamecommand增强用法:IF[/i]string1compare-opstring2command例:IFEXISTfilename(delfilename)ELSE(echofilenamemissing批处理命令入门指导 17)也可写成:ifexistfilename(delfilename)else(echofilenamemissing)但这种写法不适合命令太多或嵌套命令的使用。三、循环语句1、指定次数循环FOR/L%variableIN(start,step,end)DOcommand[command-parameters]组合命令:FOR/L%variableIN(start,step,end)DO(Command1Command2……)2、对某集合执行循环语句。FOR%%variableIN(set)DOcommand[command-parameters]FOR/R[[drive:]path]%variableIN(set)DOcommand[command-parameters]检查以[drive:]path为根的目录树,指向每个目录中的FOR语句。如果在/R后没有指定目录,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。同前面一样,command可以用括号来组合:FOR/R[[drive:]path]%variableIN(set)DO(Command1Command2……commandn)3、条件循环利用goto语句和条件判断,dos可以实现条件循环@echooffsetvar=0rem************循环开始了:continueset/avar+=1echo第%var%此循环if%var%lss100gotocontinuerem************循环结束了echo循环执行完毕pause四、子程序在批处理程序中可以调用外部可运行程序,比如exe程序,也可调用其他批处理程序,这些也可以看作子程序,但是不够方便,如果被调用的程序很多,就显得不够简明了,很繁琐,在windowsXP中,批处理可以调用本程序中的一个程序段,相当于子程序,这些子程序一般放在主程序后面。子程序调用格式:CALL:labelarguments子程序语法::labelcommand1批处理命令入门指导 18command2...commandngoto:eof传至子程序的参数在call语句中指定,在子程序中用%1、%2至%9的形式调用,而子程序返回主程序的数据只需在调用结束后直接引用就可以了,当然也可以指定返回变量。例1:@echooffcall:subreturn你好echo子程序返回值:%return%pause:subset%1=%2goto:eof运行结果:你好子程序例2:设计一个求多个整数相加的子程序@echooffsetsum=0call:subsum102035echo数据求和结果:%sum%pause:subrem参数1为返回变量名称set/a%1=%1+%2shift/2ifnot\"%2\"==\"\"gotosubgoto:eof运行结果:65五、用ftp命令实现自动下载ftp是常用的下载工具,ftp界面中有40多个常用命令。六、用7-ZIP实现命令行压缩和解压功能详细情况见7-zip帮助文件七、调用VBScript程序用法:CScript脚本名称[脚本选项...][脚本参数...]八、将批处理转化为可执行文件:由于批处理文件是一种文本文件,任何人都可以对其进行随便编辑,所以如果将其转换成.com格式的可执行文件,不仅执行效率会大大提高,而且不会破坏原来的功能,更能将优先级提到最高。Bat2Com就可以完成这个转换工作。小知识:在DOS环境下,可执行文件的优先级由高到低依次为.com>.exe>.bat>.cmd。九、时间延迟:执行一条命令后延迟一段时间再进行下一条命令。1、利用ping命令延时@echooffecho延时前!ping/n3127.0.0.1>nulecho延时后!pause解说:用到了ping命令的“/n”参数,表示要发送多少次请求到指定的ip。本例中要发送3批处理命令入门指导 19次请求到本机的ip,(127.0.0.1)。127.0.0.1可简写为127.1。2、利用for命令延时@echooffecho延时前!for/l%%iin(1,1,5000)doecho%%i>nulecho延时后!pause十、模拟进度条@echooffmodeconcols=113lines=15&color9fclsecho.echo程序正在初始化...echo.echo┌──────────────────────────────────────┐set/p=■ 20 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo6.com 版权所有 湘ICP备2023023988号-11
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务