批处理文件bat 语法备忘

批处理文件bat 语法备忘

扩展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批处理文件。
.M'D:QkM0]1l3D0 EDA中国门户网站M0P8/.qi'F!j
==== 注 =======================================
hch[D!x7qV0 .bat是dos下的批处理文件 EDA中国门户网站6_/K#s9a:p
.cmd是nt内核命令行环境的另一种批处理文件 EDA中国门户网站 {,y/F�m;Y
从 更广义的角度来看,unix的shell脚本以及其它操作系统甚至应用程序中由外壳进行解释执行的文本,都具有与批处理文件十分相似的作用,而且同样是由 专用解释器以行为单位解释执行,这种文本形式更通用的称谓是脚本语言。所以从某个程度分析,batch, unix shell, awk, basic, perl 等脚本语言都是一样的,只不过应用的范围和解释的平台各有不同而已。甚至有些应用程序仍然沿用批处理这一称呼,而其内容和扩展名与dos的批处理却又完全 不同。 EDA中国门户网站9ia{S|msL
===================================
0w3gn7^/k7v0
)DNnD W8V5ka3Y@0 首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。
Y*ez7hq2VAZ j%HQ0
O8z�Bg/RlpQCu0 ==== 注 =================== EDA中国门户网站^@({']9W4M
批 处理文件中完全可以使用非dos命令,甚至可以使用不具有可执行特性的普通数据性文件,这缘于windows系统这个新型解释平台的涉入,使得批处理的应 用越来越"边缘化"。所以我们讨论的批处理应该限定在dos环境或者命令行环境中,否则很多观念和设定都需要做比较大的变动。
;/:a!?2b`9em5q b0 ======================== EDA中国门户网站$P9^4Wd#H ^)_h@#Q
EDA中国门户网站%r�g3qH+WU%Nz9ui
其 次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来 循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命令(包括 内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。 EDA中国门户网站g@%yA3I/a0n F

9|G2l Evd.~0 ==== 注 ================== EDA中国门户网站G!k W8n9`g%q
批 处理文件(batch file)也可以称之为批处理程序(batch program),这一点与编译型语言有所不同,就c语言来说,扩展名为c或者cpp的文件可以称之为c语言文件或者c语言源代码,但只有编译连接后的 exe文件才可以称之为c语言程序。因为批处理文件本身既具有文本的可读性,又具有程序的可执行性,这些称谓的界限是比较模糊的。
$`2]KMyM+l%_0 ===========================
7vVP;s|uC0
QZHhMf]w0i0 第 三,每个编写好的批处理文件都相当于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个 良好的习惯是在硬盘上建立一个bat或者batch目录(例如C:/BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置 上c:/batch,你就可以在任意位置运行所有你编写的批处理程序。
}q1^B"x"W5^},d`0
7A9jk4K)/^-H|0 ==== 注 =====
K+FcN9j/p~(}0 纯 以dos系统而言,可执 行程序大约可以细分为五类,依照执行优先级由高到低排列分别是:DOSKEY宏命令(预先驻留内存),COMMAND.COM中的内部命令(根据内存的环 境随时进驻内存),以com为扩展名的可执行程序(由command.com 直接载入内存),以exe位扩展名的可执行程序(由command.com 重定位后载入内存),以bat位扩展名的批处理程序(由command.com 解释分析,根据其内容按优先级顺序调用第2,3,4,5种可执行程序,分析一行,执行一行,文件本身不载入内存) EDA中国门户网站*SN[o jgu^"kC
============
第 四,在DOS和Win9x/Me系统下,C:盘根目录下的AUTOEXEC.BAT批处理文件是自动运行批处理文件,每次系统启动时会自动运行该文件,你 可以将系统每次启动时都要运行的命令放入该文件中,例如设置搜索路径,调入鼠标驱动和磁盘缓存,设置系统环境变量等。下面是一个运行于Windows 98下的autoexec.bat的示例: EDA中国门户网站A2c,@7_]ZS
@ECHO OFF
LHj#aa `{0 PATH C:/WINDOWS;C:/WINDOWS/COMMAND;C:/UCDOS;C:/DOSTools;<br>
/}]pT/ hc0 C:/SYSTOOLS;C:/WINTOOLS;C:/BATCH EDA中国门户网站u.OGG(S
LH SMARTDRV.EXE /X EDA中国门户网站7k4b+l3v'ON+x
LH DOSKEY.COM /insert
9K%`INGSFa0 LH CTMOUSE.EXE EDA中国门户网站5OK5Xv�JGh
SET TEMP=D:/TEMP EDA中国门户网站} c9T(| ^
SET TMP=D:/TEMP EDA中国门户网站K3i6kj$W:_-wN
==== 注 ===== EDA中国门户网站W(D2tPkx
AUTOEXEC.BAT为DOS系统的自动运行批处理文件,由COMMAND.COM启动时解释执行;
q$?5L}q+q I�z)j7?1u0 而在Win9x环境中,不仅增加支持了 DOSSTART.BAT, WINSTART.BAT 等许多其它自动运行的批处理文件,对AUTOEXEC.BAT 也增加了 .DOS .W40 .BAK .OLD .PWS 等许多变体以适应复杂的环境和多变的需求。
9}.a{%Dq0 ==== willsort 编注 ============= EDA中国门户网站 QG.i v H~|i+z
以 下关于命令的分类,有很多值得推敲的地方。常用命令中的@本不是命令,而dir、copy等也很常用的命令却没有列入, 而特殊命令中所有命令对我来说都是常用命令。建议将批处理所引用的命令分为内部命令、外部命令、第三方程序三类。而内部命令和外部命令中别有一类是专用于 或常用于批处理中的命令可称之为"批处理命令"。 EDA中国门户网站;xZC[7t;x Q a5k

uylEQ AJL+yU0 以下摘录MS-DOS 6.22 帮助文档中关于"批处理命令"的文字,当然,其中有些概念和定义已经有些落后了。
"M y w/8O0 EDA中国门户网站W-Y L*a%XaB
批处理命令 EDA中国门户网站fKFV p5J/QP)Y0`6w

xd? @M+b0 批处理文件或批处理程序是一个包含若干MS-DOS命令的正文文件,扩展名为.BAT。当在命令提示符下敲入批处理程序的名称时,MS-DOS成组执行此批处理程序中的命令。
*~�e,C?-PN%M^0 EDA中国门户网站VnZK)C@:M J
任何在命令提示符下可使用的命令都可用在批处理程序中。此外,下面MS-DOS命令是专门在批处理程序中使用的。 EDA中国门户网站.Q;P~`z4tUF
========== EDA中国门户网站G D&YRvB+/.O
EDA中国门户网站?j(k$hw+^9s:a
常用命令
3v)B7~Ce O|0P9p0
h4T W!HgFz5A0 echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起。 EDA中国门户网站8v;IAs8`4j[
EDA中国门户网站0])GwT-[;a c4A
==== 注 =========== EDA中国门户网站)}+k@3h&? ~S
首先, @ 不是一个命令, 而是DOS 批处理的一个特殊标记符, 仅用于屏蔽命令行回显. 下面是DOS命令行或批处理中可能会见到的一些特殊标记符: EDA中国门户网站;]-Sc&E2gN!mb
CR(0D) 命令行结束符 EDA中国门户网站9jd_6r&K?A
Escape(1B) ANSI转义字符引导符
H:FM/`I@9k0 Space(20) 常用的参数界定符
*|:nv,~'/;hs0 Tab(09) ; = 不常用的参数界定符 EDA中国门户网站9z(R DH#NX v5C}C/B0tE
+ COPY命令文件连接符 EDA中国门户网站as7bEg]g
* ? 文件通配符
q~Kn2Q$IT9b!z.j7T0 "" 字符串界定符
"^ o/YF!P(m7y9M0 | 命令管道符
w:Fw8~ | D6b0 < > >> 文件重定向符
(OY&S;og/-[0 @ 命令行回显屏蔽符 EDA中国门户网站GR7D*@#y @/}
/ 参数开关引导符 EDA中国门户网站cu7^ R�g?1e}
: 批处理标签引导符 EDA中国门户网站8{/D7I'Rs p
% 批处理变量引导符
Ftoo5Z!R6U)D LfX/c0 EDA中国门户网站[mW${!QS'm"I
其次, :: 确实可以起到rem 的注释作用, 而且更简洁有效; 但有两点需要注意:
K|Qu'Nx0u(o0 第一, 除了 :: 之外, 任何以 :开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容, 只是为了与正常的标号相区别, 建议使用 goto 所无法识别的标号, 即在 :后紧跟一个非字母数字的一个特殊符号. EDA中国门户网站@,jSJ+n#F:J4W
第 二, 与rem 不同的是, ::后的字符行在执行时不会回显, 无论是否用echo on打开命令行回显状态, 因为命令解释器不认为他是一个有效的命令行, 就此点来看, rem 在某些场合下将比 :: 更为适用; 另外, rem 可以用于 config.sys 文件中.
6m2Fw@Bf0 =====================
*H3e"yhcy2ST0
&fX[/Ys NO-R j0 echo 表示显示此命令后的字符
;}a(GlG x%`0 echo off 表示在此语句后所有运行的命令都不显示命令行本身 EDA中国门户网站hm�j_%wt
@与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。 EDA中国门户网站2k%Pe RiRwo }S
call 调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。 EDA中国门户网站'ak V+_m�T~nWe
pause 运行此句会暂停批处理的执行并在屏幕上显示Press any key to continue...的提示,等待用户按任意键后继续 EDA中国门户网站&z+DsqT
rem 表示此命令后的字符为解释行(注释),不执行,只是给自己今后参考用的(相当于程序中的注释)。
X,g2f%f2i)}7h0 ==== 注 =====
2|rr'W@0Pa#X0 此处的描述较为混乱, 不如直接引用个命令的命令行帮助更为条理
i [B*s6[`R p0
(S }t*bzje0 ------------------------- EDA中国门户网站}ay1[{;v9lV
ECHO
7nB2ab1?8M5ggV j0 EDA中国门户网站+s8~oOQK
当程序运行时,显示或隐藏批处理程序中的正文。也可用于允许或禁止命令的回显。
"uTi,a"S-c@J0 EDA中国门户网站-a^%SdJvn%C1m
在运行批处理程序时,MS-DOS一般在屏幕上显示(回显)批处理程序中的命令。 EDA中国门户网站_.kj~)r
使用ECHO命令可关闭此功能。
%@ugX+[0
6RW _I3J*k&JX0 语法 EDA中国门户网站m h8p%eV j

ab_q CB&/ [%| lF0 ECHO [ON|OFF]
gW3|rhG4cTQ0
+X d3~@-l Z+m6_0 若要用echo命令显示一条命令,可用下述语法:
l ba4d)c^m0 EDA中国门户网站9[f7Xy[
echo [message]
:h7R*lM(Q!Y'[4A(Od3K0
2TdO2q!szmKv0 参数
d4y8lC[+i)r9r0 EDA中国门户网站L:m~+xd]g{
ON|OFF EDA中国门户网站{+mG:l6@3y4@A
指定是否允许命令的回显。若要显示当前的ECHO的设置,可使用不带参数的ECHO EDA中国门户网站%NL5f(S5|K2tc
命令。 EDA中国门户网站L,Qt�nA*HV
EDA中国门户网站,V~$_5j$k9h
message
$L8K+pS(_.AQ m{0 指定让MS-DOS在屏幕上显示的正文。
#cl}//_i`0U Vv0 EDA中国门户网站/YapzBl*x;|~
------------------- EDA中国门户网站)rf8zZc
EDA中国门户网站(O/T[&aPmj&s+h
CALL EDA中国门户网站Xo;Rv1t^
EDA中国门户网站8f-WCbv M9o
从一个批处理程序中调用另一个批处理程序,而不会引起第一个批处理的中止。
Q{FD�YK`0 EDA中国门户网站*SC f;PC�w3q([I
语法 EDA中国门户网站'U;x rr[.l7Po{D

^2Y8C)r2C1H0 CALL [drive:][path]filename [batch-parameters] EDA中国门户网站!nx-g1r@ C6T u
EDA中国门户网站'H,|2xg!l-y.?5m ci
参数
d? j`Jt H;t0 EDA中国门户网站K0]d9aZ$WX
[drive:][path]filename
;u)~3}x-Z0 指定要调用的批处理程序的名字及其存放处。文件名必须用.BAT作扩展名。
#o$A/X0FxL|~,}0 EDA中国门户网站NO+T F�GxtW

_ED*SBZ?5j0 batch-parameters EDA中国门户网站:L.K)F9q-|x{(I-O!`
指定批处理程序所需的命令行信息。
O;ia7l9sV|0 EDA中国门户网站9_:Tt&m7yT?
-------------------------------
9iEV6RXl0
)yj1N)s(Wtd3BS0 PAUSE
%nFR(/I^0f(k0
M/h|Q(Kw/kq t.P0 暂停批处理程序的执行并显示一条消息,提示用户按任意键继续执行。只能在批处 EDA中国门户网站N*D {B"~lJ&Y
理程序中使用该命令。
{SS!c,D3F0 EDA中国门户网站8J#};H?6t$]SxP
语法 EDA中国门户网站*N2iJ2vt Ow|,i
EDA中国门户网站z8iu l3F1f2m4{5r
PAUSE
!/c`[�P^_0
-h Pb)t;B0
~#LW/zW @)Bk4}3f9[0 REM
Q;J4]O$}gb dp|0
,OxA/xQe cI0 在批处理文件或CONFIG.SYS中加入注解。也可用REM命令来屏蔽命令(在CONFIG.SYS EDA中国门户网站3q7e+i2Z iV
中也可以用分号 ; 代替REM命令,但在批处理文件中则不能替代)。
{)s.R"@ ^`n$c3k#FHF0 EDA中国门户网站)g?6K2P7z@v|[�D
语法 EDA中国门户网站5oW ys0yc
EDA中国门户网站!J"n:O%PR-gY
REM [string]
g'^E&J[@#_-Bz0
XX"a2w'U�WFV;T0 参数
"zfo RSw!HA0 EDA中国门户网站;MW Gi s%v.ZD+xxHFg
string EDA中国门户网站e!xH!LZ6eA a
指定要屏蔽的命令或要包含的注解。 EDA中国门户网站4u,ka7R�S//!~6hb
=======================
CU^/'R,V I }Q�N*vQ0 EDA中国门户网站 O_j m8_ s
例1:用edit编辑a.bat文件,输入下列内容后存盘为c:/a.bat,执行该批处理文件后可实现:将根目录中所有文件写入 a.txt中,启动UCDOS,进入WPS等功能。
Q$N|.h6t6ab#Y0
{)vM+m?;eR"VLn0   批处理文件的内容为:         命令注释: EDA中国门户网站$l7Qfs4k,FiM
EDA中国门户网站u0rc&N$TJ b
    @echo off           不显示后续命令行及当前命令行
Iq'C+I/i0     dir c:/*.* >a.txt       将c盘文件列表写入a.txt EDA中国门户网站*f8u,[Fx e ^4C
    call c:/ucdos/ucdos.bat    调用ucdos
"rnR$dZO%E%N0     echo 你好            显示"你好" EDA中国门户网站EmZPm2`H1?
    pause              暂停,等待按键继续
a%Qt8X$WA`:w0     rem 准备运行wps         注释:准备运行wps EDA中国门户网站2S:}~j1q^"q-k
    cd ucdos            进入ucdos目录
x'N&KqdG gu0     wps               运行wps   EDA中国门户网站,hj)Y%V}&Gq w

7q+coO?7I[ K4fx0 批处理文件的参数
9b'Y.c E g/Sa0
X;@)W!@!Vr*y2tZn?&T0 批处理文件还可以像C语言的函数一样使用参数(相当于DOS命令的命令行参数),这需要用到一个参数表示符"%"。
MJ;YF!J F4}f0 EDA中国门户网站E3b Q:[VVc0Og
%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。
Nh;z*@$@i*t0 EDA中国门户网站FA ?$o'DR{ ~J
例2:C:根目录下有一批处理文件名为f.bat,内容为:
M*y$?W(A pE0 @echo off EDA中国门户网站*jo^8U/Q-sRX}c
format %1
uw.n,[/@0
)aqy4d!X'E^0 如果执行C:/>f a: EDA中国门户网站3a zK#bx yP
那么在执行f.bat时,%1就表示a:,这样format %1就相当于format a:,于是上面的命令运行时实际执行的是format a:
#jw6I6C3L6B0 EDA中国门户网站3xLAB'^6}
例3:C:根目录下一批处理文件名为t.bat,内容为: EDA中国门户网站2{}6vc7Uy)i&A
@echo off EDA中国门户网站9f W-t,Tw
type %1
3F_uG$w0 type %2 EDA中国门户网站nwMf#d'c8Y.u vl
EDA中国门户网站{ Wck&l-ih
那么运行C:/>t a.txt b.txt EDA中国门户网站'Q/|Xi,s!j/o
%1 : 表示a.txt
+y(Pe['N)[c$JXN0 %2 : 表示b.txt
o;jj�k?}kB0 于是上面的命令将顺序地显示a.txt和b.txt文件的内容。
W pI+CI"Y-Q0 EDA中国门户网站/lAg6VgV
==== 注 ===============
Nv+N)opQB0 参 数在批处理中也作为变量处理, 所以同样使用百分号作为引导符, 其后跟0-9中的一个数字构成参数引用符. 引用符和参数之间 (例如上文中的 %1 与 a: ) 的关系类似于变量指针与变量值的关系. 当我们要引用第十一个或更多个参数时, 就必须移动DOS 的参数起始指针. shift 命令正充当了这个移动指针的角色, 它将参数的起始指针移动到下一个参数, 类似C 语言中的指针操作. 图示如下:
X|2r_5i0 EDA中国门户网站4V)U IW S
初始状态, cmd 为命令名, 可以用 %0 引用
&od @5m S /w0 cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 EDA中国门户网站f9I3@)GM#nJ#lf
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
2AS7es#U|]lrh0 | | | | | | | | | | EDA中国门户网站kq L7j'n.m
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 EDA中国门户网站 V8x6G%L2p^ze0k
EDA中国门户网站KM2ZP ?1?JeE
经过1次shift后, cmd 将无法被引用
)V^'q5mua9q+rT4n0 cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
7T2N|.y!TC@md0 ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ EDA中国门户网站e-VFu9H,n-^-N
| | | | | | | | | | EDA中国门户网站U S(n!T%fC%t yP
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9
d2B)r"w:Co#|0
?+M MWX0 经过2次shift后, arg1也被废弃, %9指向为空, 没有引用意义
,])u_A#/K#X;_S/Fx0 cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 EDA中国门户网站| JSs XM
^ ^ ^ ^ ^ ^ ^ ^ ^
6w;p-ivt/R X0 | | | | | | | | |
Hf"_&x*QZq0 %0 %1 %2 %3 %4 %5 %6 %7 %8 EDA中国门户网站P*j#RzCB

,a1?5h%^0C8v0 遗憾的是, win9x 和DOS下均不支持 shift 的逆操作. 只有在 nt 内核命令行环境下, shift 才支持 /n 参数, 可以以第一参数为基准返复移动起始指针. EDA中国门户网站o2nB L8Z0M%c0Z
================= EDA中国门户网站0r'pHvR5ko

zjw5[#q-]4U0 特殊命令
#c7Ar.R,XW$bp!y*qF0 EDA中国门户网站P Qm{!Csr_w
EDA中国门户网站8I+L;Y+e4Yju
if goto choice for是批处理文件中比较高级的命令,如果这几个你用得很熟练,你就是批处理文件的专家啦。
3D2uWc^9sE LG0
7M#a![Ly h-g0
3PR%P5d0iY]4m.?0 一、if 是条件语句,用来判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式: EDA中国门户网站1vkz�]#I(X*q[Q
EDA中国门户网站9r'}X)k^*U'q|7w
1、if [not] "参数" == "字符串" 待执行的命令 EDA中国门户网站 F4KV+YB
EDA中国门户网站PfjM ^iSp
参数如果等于(not表示不等,下同)指定的字符串,则条件成立,运行命令,否则运行下一句。 EDA中国门户网站@p_%s5|Z

KTd,Y%H{U-G0 例:if "%1"=="a" format a:
K$^XvW_5n0
[Am V7Z%jw,~0 ==== EDA中国门户网站j2p I`*N@"q&fc~}$E

8e8L+Bz~8[2~0 if 的命令行帮助中关于此点的描述为:
~(t.h+B6M0 IF [NOT] string1==string2 command
XR /j5sC�u0 在此有以下几点需要注意: EDA中国门户网站 O0c _iBx
1. 包含字符串的双引号不是语法所必须的, 而只是习惯上使用的一种"防空"字符
mBj ]/BG{0 2. string1 未必是参数, 它也可以是环境变量, 循环变量以及其他字符串常量或变量
2f5]aq!/$u7S3q0 3. command 不是语法所必须的, string2 后跟一个空格就可以构成一个有效的命令行 EDA中国门户网站!TKQa1/S
=============================
G)b�Y,^D#t"@*qDW0 EDA中国门户网站%Y}4L R5Pf~
2、if [not] exist [路径/]文件名 待执行的命令
LK&F`%Pc9~*j%_0 如果有指定的文件,则条件成立,运行命令,否则运行下一句。
@n ]7xud0
%ztU)zf#Q4|x0 如: if exist c:/config.sys type c:/config.sys
B ^,}5E b5E[K'E!q0 表示如果存在c:/config.sys文件,则显示它的内容。 EDA中国门户网站,J4e/dJ7c$G6OT"_-h%M
EDA中国门户网站3uB9~_ r4y
****** 注 ******** EDA中国门户网站&P
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值