批处理常用命令解释

@命令。
@符号是E-mail的专用符号,它在批处理中的作用是让系统在执行批处理命令时不显示该行命令本身。通俗一点说,当某一行命令最前面使用了该名,这一行的命令就不在执行过程中显示了。在例一首行的@echo off中,@的作用就是让批处理在执行时不显示后面的echo off部分。请读者结合后面的echo命令理解使用.

echo命令。
echo命令是一个开关命令,它只有on和off两中状态,一般出现在批处理第一行中,它的作用是保证批处理在执行时不显示它后面所有命令本身,只显示执行中的结果或其他信息,用法为:ECHO[ON|OFF]。可见,echo命令和@命令的区别在于前者关闭了所有命令本身,而后者只关闭其中一样。例一第一行中,将echo命令和@命令结合起来使用,达到了两个目的:不显示echo off命令本身,不显示以后各行中的命令本身。
echo命令还有其他特别的用法,比如用来在批处理执行过程中显示一段信息,用法为:ECHO[消息内容],见如例二中最后两行,echo后面的所有内容将被显示到屏幕上。还可以结合管道命令将显示的信息写进某个文件中,这样就可以使用echo命令来直接编辑文本文件了。

::和rem命令.
::和rem命令的作用和用法都完全一样,用来在批处理中做注释,增加程序的可读性。它们的用法很简单,直接将注释内容写到::或rem后面就可以了。注释的内容可以为任意ASC字符(甚至一条命令),它们是不会在执行时显示出来,或被执行的。但需注意的是,使用::或rem命令做注释,一般都是另提一行来写的,这样显得规范且不易出错。

pause命令。
该命令在批处理中使用十分广泛,其作用是暂停批处理的执行,直到用户按下键盘上的任意键(Break键除外)。批处理在执行过程中显示的所有信息都是一闪而过的,只有当用户暂停执行时,才可以看到当前屏幕上的信息。当程序要让用户看一段信息,或要给用户时间去考虑某个问题的时候,就可以在这里加上一个pause,批处理执行到这里时将显示“按任意键继续”的信息。用法很简单,直接在要暂停的地方使用pause命令即可.
如果要让pause命令执行后的“请按任意键继续”的提示不出现,可以这么些pause >nul。同理其他命令执行后的提示如果不想显示,都可以这么写,在后面跟上>nul即可。

call命令.
该命令是用来从一个批处理中调用另一个批处理的,用法为:CALL [驱动器][路径]批处理名[参数]。使用此命令,可以实现多个批处理互相调用,类似于程序中各个模块之间的互相调用。例如有两个批处理名分别为01.bat和02.cmd,在01.bat里有如下命令:
call 02.cmd name.tx
当01.bat执行到此句时

,自动停止后面命令的执行,而转到执行02.cmd,name.txt作为02.cmd的参数。关于批处理中使用参数的详细用法,后面将详细介绍。

:和goto命令.
这是两个成对出现的命令,在任何一个批处理中有多少个:就一定至少有多少个gogo。goto命令的作用,是告诉程序并不按顺序向下执行,而是要跳转到另一个地方,而:标识符则唯一标记了goto命令要跳转的地址。简单来说,goto是个跳转命令,而:是一个标签。当程序运行到goto时,将自动跳转到:所标记的地方去执行。用法举例见例二。
注意:goto命令的标签长度不能超过8个字节,否则可能会出错。即thistest0和thistest的效果是一样的,批处理只取前8个字节,即thistest。

setlocal和endlocal命令。
这两个命令也是成对出现的,用来对批处理执行过程中的环境变量进行临时修改和操作,当执行过endlocal或关闭批处理后环境变量仍为系统原先设置的值。例如系统环境变量设置了Windows文件夹的目录为C:\Windows,而在批处理执行过程中要设置Windows文件夹的目录为D:\Windows,这就可以使用设置环境变量的命令在setlocal和endloacl之间进行重新设置,这个设置只限于该批处理执行过程中,是一个临时设置。一般情况下setlocal和endlocal两个命令在批处理中使用并不广泛。
小知识:所谓“环境变量”,是指包含诸如驱动器、路径或文件名之类的字符串,它控制着各种程序在执行时的外部环境,如临时文件位置等。可以使用“控制面板”——“系统”——“高级”——“环境变量”或使用set命令对环境变量进行修改。

复杂命令:if、set、shift、for
复杂命令本身比较难掌握,但它们功能强大,在批处理中的应用是十分广泛的,它们是批处理中各种重要功能实现的基础。熟练这些命令才可以让写出的批处理实现想要的功能。
if命令。
懂得程序的朋友都知道,if命令在各种程序中都有使用,而且用的十分普遍。在批处理中,if命令和其他程序语言中的作用基本一样,都是代表“如果……就……”,是一个选择判断命令,或者说条件命令。在批处理中,if命令的使用也十分普遍,凡是牵扯到分支结构的地方都要使用if命令,其结构如下图
if命令判断程序执行时条件是否满足,如果满足就执行一个操作,不满足就执行另一种操作,条件可以是单个,也可以是多个的。根据if命令判断的对象,可将其分为三类:
输入判断,用法为:IF [NOT] string1==string2 command
存在判断,用法为:IF [NOT] EXIST filename command
结果判断,用法为:IF [NOT] ERRORLEVEL number command
说明:也可以在if后面仅跟一个not来判断“如果不……就……”,用

法跟“如果……就……”的用法一样,本文不另做介绍.

(1)输入判断:
在批处理执行时,可以为其赋予一个或多个参数,如何根据输入参数的不同来决定批处理执行不同的命令呢?使用if命令的输入判断就可以实现。
例三
[Copy to clipboard] [ - ]CODE:
if "%1"=="1" goto tern1
if "%1"=="2" goto tern2
:tern1
echo 输入为1
:tern2
echo 输入为2
%1在批处理中代表参数,后面将专门介绍。当输入参数为1时,执行term1部分的命令,参数为2时就执行term2部分的命令。通常情况下,为了使批处理更像一个标准的程序,也可以把该批处理的用法写进去,查看方式跟查看DOS命令的用法相同,实现代码见例二的2、3、4行和最后三行。
(2)、存在判断。
该用法可以为if命令指定一个文件名,当该文件存在时判断结果为真,否则为假。存在判断用法比较简单,如见例一。
小技巧:if命令的存在判断不能用来判断一个目录是否存在,只能判断文件,但在每个目录下都存在空设备,因此可以使用判断空设备是否存在的方式来间接判断目录是否存在。方法为:IF [NOT] EXIST [drive:][path]\nul command。例如:if not exist e:\tools\con md e:\tools,如果不存在e:\tools这个目录就新建立一个.
(3)、结果判断。
这是if命令三种判断中最重要的一种。由于DOS命令在执行完毕后都会给系统一个返回值,用来表示执行结果。在if命令中设置一个比较值,如果返回值大于或等于比较值就继续执行,否则就退出if命令。

&命令
&命令是最简单的组合命令,它的作用是连接多条子命令,不管前面的命令是否执行成功,后面的命令都将按顺序依次执行完毕。任何一个命令的执行结果都不影响其他子命令的执行。
示例:
del a.tmp & echo All done! & pause
这句命令由三条子命令组成,它们依次执行,任何一个命令的执行结果都不影响其他子命令的执行。
&&命令
&&命令也是用来连接多条子命令的,用法与&命令相同,不同之处在于,它在从前往后依次执行被它连接的几个子命令时会自动判断是否有子命令执行出错,一旦发现某个子命令执行出错,该子命令后面的全部命令都将被忽略。这样,将某些在特定条件下不必执行的命令用&&命令连接在它的条件后面,当条件不正确时就不执行后面的命令了。
示例:
dir file://IP/www/user.mdb && copy file://IP/www/user.mdb e:\backup\user.mdb
先用dir命令查看远程主机上user.mdb文件是否存在,执行成功后(文件存在)就用copy命令复制到本地,否则不执行copy命令。

||命

令。
||命令同样用来连接多条子命令,用法同前两种组合命令完全一样,但它的作用跟&&命令刚好相反,当多条子命令中只要有一个可以成功执行(&&命令是执行出错),后面的所有子命令将被忽略。
示例:
dir 01.exe || dir 02.exe || echo No virus found! & pause
echo Found Virus! & goto clean
假设01.exe和02.exe是同一个病毒的两个文件,先用dir 01.exe命令检查文件01.exe是否存在,如果不存在(执行不成功)就继续执行dir 02.exe检查02.exe是否存在,如果存在01.exe就显示发现病毒,并跳转程序到清除病毒部分。
管道命令用来实现将一个命令的输出信息和另一个命令的输入相连接,类似与从管道中传递实体。用户只能看到最后的结果而不能看到它们之间通信的过程,因为这个过程是在管道中进行的。在批处理中使用管道命令,可以让命令之间互相通信,而将中间过程透明化,因此作用十分巨大。
小知识:操作系统中把“管道”定义为连接一个读进程和一个写进程以实现它们之间通信的文件,这个“文件”是在内存中建立的,当信息传递结束后它也随之消失,所以是不可见的。

| 命令。
| 命令用来实现两个命令之间的管道,它将前一命令的输出作为后一命令的输入,这种用法比较特殊,但却很高效。可以分两步来理解|命令:先将前一命令执行后的结果输出到内存的某一地址,再让后一个命令从该地址来取输入信息。在这两步之间,这个被两个命令共同使用的内存就相当于管道。
示例:
type code.txt | debug
想将一个保存在code.txt中的代码让dubug程序来执行,不必先打开debug,再将code.txt的内容粘贴在里面后执行,只需要利用这个管道命令就可以实现。先用type命令在内存中显示code.txt的内容(type命令的输出),然后将这些输出作为debug的输入内容传递给debug。

> 和 >> 命令。
> 和 >> 命令又被称为输出重定向命令,它们的作用是一样的,都是将前一命令的输出写到一个文件中。在批处理中,它们往往被用来将某些信息保存到一个文件中。
示例:
dir /s e:\ > a.txt
这条命令用来得到一份E盘的目录和详细文件列表,并保存到a.txt文件中。先用dir/s命令将E盘的目录列出来(在内存中),然后用>重定向命令将该部分内存的内容写到a.txt中。>命令写文件的方式是从文件第一行开始,直到写完管道中的内容,原来文件的起始部分将被覆盖。所以如果要在同一个文件中再写进去F盘的详细文件列表,就要使用>>命令了,因为>>命令是从文件在最后一行,将管道中的信息追加进去的。
示例:
dir /s e:\ > a.txt
di

r /s f:\ >> a.txt
可见,>命令和>>命令的不同之处在于前者是从文件的第一行开始覆盖,而后者是从文件的最后一行开始追加。

<&和>&命令。
这三个命令一般不常用,本文只作简单介绍,有兴趣的读者可以通过其他途径深入学习:
<,输入重定向命令,从文件中读入命令输入,而不是从键盘中读入。
>&,将一个句柄的输出写入到另一个句柄的输入中。
<&,刚好和>&相反,从一个句柄读取输入并将其写入到另一个句柄输出中。
将批处理转化为.com可执行文件:
由于批处理文件是一种文本文件,任何人都可以对其进行随便编辑,不小心就会把里面的命令破坏掉,所以如果将其转换成.com格式的可执行文件,不仅执行效率会大大提高,而且不会破坏原来的功能,更能将优先级提到最高。Bat2Com就可以完成这个转换工作。
小知识:在DOS环境下,可执行文件的优先级由高到低依次为.com>.exe>.bat>.cmd,即如果在同一目录下存在文件名相同的这四类文件,当只键入文件名时,DOS执行的是https://www.360docs.net/doc/8f2723676.html,,如果需要执行其他三个文件,则必须指定文件的全名,如name.bat。
这是一个只有5.43K大小的免费绿色工具,可以运行在纯DOS或DOS窗口的命令行中,用法:Bat2Com
FileName,这样就会在同一目录下生成一个名为https://www.360docs.net/doc/8f2723676.html,的可执行文件,执行的效果和原来的.bat文件一样。例十五:
@echo off
echo MM,do you love me ?
:love
choice
Yes or No?
if errorlevel 2 goto love
pause
给这个批处理稍加修饰,就是一个简单版的“非爱不可”,只有当选择Yes的时候才可以退出,否则就无限循环。将love.bat和Bat2Com.exe放在同一目录,然后执行bat2com love.bat,立刻就在该目录下生成一个https://www.360docs.net/doc/8f2723676.html,的可执行文件。


相关文档
最新文档