|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
一.批处理内部命令简介 1 @* Z; [) c" s
1.Echo 命令 ) U6 C7 ?1 o) X
打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。 7 o$ U2 m7 K& ]/ ^
语法 & T: ` \9 ?" e/ K
echo [{on|off}] [message] ! Y% F6 w. y0 k9 y$ A" [
Sample:@echo off / echo hello world
- ?: \2 j1 [9 n: h& |( {' n在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用> >> ^)结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。 , L" ?# P3 m5 ~. E0 z( a
2.@ 命令
- y5 \* }% `9 A! v& p4 V表示不显示@后面的命令,在入侵过程中(例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使用的命令啦。
# @3 }& }4 `$ z+ E2 ~- r; T' fSample:@echo off
3 |5 `' q' J5 R, ~& X@echo Now initializing the program,please wait a minite... ' f: r( G" B' k& U( Y5 V/ {
@format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这个参数给我们,效果和/y是一样的。) ! C- w5 ^8 C; M( x8 E K
3.Goto 命令 ) C, _' y6 p y" m) l
指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。
9 E+ u/ r& Q E) x4 i# Q+ Q语法:goto label (label是参数,指定所要转向的批处理程序中的行。) & I7 k- j8 I$ n) b8 H4 k( z
Sample: : Y$ n9 ^1 s# c% C, S& G2 K
if {%1}=={} goto noparms 3 w; i2 q" H0 `
if {%2}=={} goto noparms(如果这里的if、%1、%2你不明白的话,先跳过去,后面会有详细的解释。)
" z5 Y% N: i! R2 I. _, ?$ {3 |@Rem check parameters if null show usage
( p% J2 g( S/ e; c0 s( k- k! V6 n:noparms
6 ?! g* G) y' q. g9 [- Techo Usage: monitor.bat ServerIP PortNumber ) Z6 N+ \* V; ?6 h2 J& n! \+ k. f
goto end $ s/ {4 e; Y0 t/ s; s2 s! N
标签的名字可以随便起,但是最好是有意义的字母啦,字母前加个:用来表示这个字母是标签,goto命令就是根据这个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。 & R" w* O; h! \0 P2 `) _! i
4.Rem 命令
5 @; k6 r' m3 A+ A9 W- a! M* N, b注释命令,在C语言中相当与/*--------*/,它并不会被执行,只是起一个注释的作用,便于别人阅读和你自己日后修改。 : z _( E3 ~# E" ?; z/ A9 u; n: X
Rem Message . n" C) C, |2 ?, u6 F2 E
Sample:@Rem Here is the description.
! w, A- c. p) Z+ V9 ~$ R5.Pause 命令
0 ]- e; |6 A9 Q d0 G% V# Y. X运行 Pause 命令时,将显示下面的消息:
( w5 g1 d4 H# B1 QPress any key to continue . . .
" f0 p7 |0 t1 l3 j9 A2 b: _Sample:
, U5 l' O# j" J: t0 ?@echo off
& e3 ~0 w1 h) c. z$ N) X:begin - M3 u6 Y {8 |7 c6 e& M3 s
copy a:*.* d:/back & m c$ m7 N7 r, m, V9 q/ x
echo Please put a new disk into driver A
/ | h) j9 S+ w/ M7 xpause / g, {+ H$ I6 k8 u$ w" ^9 @1 V
goto begin
; L( G% O: |! m" j$ m在这个例子中,驱动器 A 中磁盘上的所有文件均复制到d:/back中。显示的注释提示您将另一张磁盘放入驱动器 A 时,pause 命令会使程序挂起,以便您更换磁盘,然后按任意键继续处理。
/ `: ^2 S5 h. ~6.Call 命令 ( {2 N7 G* D# d6 |6 r' _( i; R
从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call,它将不会在命令行起作用。
9 N) U5 ~" p# u/ G- s' \* g' h语法 2 V6 I; x) G# h/ n) v T5 d
call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]
( P4 i/ L' j. V0 a参数 8 T+ @9 ^, u3 |& h/ e i% P+ {3 @
[Drive:}[Path] FileName
! ~; V* S, K z. D A( F指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。 9 p7 a7 k4 P% g+ b3 Y, O& k
7.start 命令
$ {$ |+ p8 n* p' W调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。
$ U. O% k3 S/ v6 p' J# b入侵常用参数: ; z4 Y0 s! L3 U' k9 W) ~0 d& ^% t
MIN 开始时窗口最小化
2 ^4 f `) L- k* j+ s0 hSEPARATE 在分开的空间内开始 16 位 Windows 程序 5 c% Q& t2 H ?! }
HIGH 在 HIGH 优先级类别开始应用程序
6 Z) j" A, x: F- tREALTIME 在 REALTIME 优先级类别开始应用程序 1 ~5 G/ G. h X( M; |. w, z
WAIT 启动应用程序并等候它结束 4 |( @2 U+ q# e3 z
parameters 这些为传送到命令/程序的参数 8 A' {# o& E, h5 o
执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本内执行,该新行为则不会发生。
! J1 K5 F) W! t6 n# e8.choice 命令
8 r1 A- y; g' ?2 xchoice 使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可输入的字符,之间无空格。它的返回码为1234……
' P% u$ }7 b: a3 a, d/ P如: choice /c:dme defrag,mem,end
8 h4 o5 {. Y7 A: Z& }" o3 I将显示
! o* h4 \" Z6 P) L$ S) [defrag,mem,end[D,M,E]? 9 Z! v2 N8 i4 W/ O
Sample: & I& l/ L A5 V; q8 n" q$ A
Sample.bat的内容如下:
3 B2 N3 L) p6 Z3 ]9 l@echo off
7 X2 S8 s2 W4 [" P8 |5 c9 r+ e6 kchoice /c:dme defrag,mem,end
W Z; S5 J9 uif errorlevel 3 goto defrag (应先判断数值最高的错误码)
$ B! e, ~. F5 l+ c/ D& Vif errorlevel 2 goto mem + Q1 y$ l5 m+ H* F4 f& p# A+ G
if errotlevel 1 goto end 8 v/ X6 g% I: ~
:defrag - ~4 ~. A; s+ L: m
c:/dos/defrag
: f) k7 w0 v& ugoto end 9 w: s; t; @3 k0 K e) k) i
:mem
1 ]( T' g% v V0 Gmem
* K* Y" h' F' r& V& a4 [2 Bgoto end + l" l9 l& |) Z) K0 N2 y i' _
:end
I& h# _/ h( t/ j" ^echo good bye + p) K. {. m& T# O& t
此文件运行后,将显示 defrag,mem,end[D,M,E]? 用户可选择d m e ,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,文件结束。
8 I9 M4 t0 r5 T5 O- K/ r; y9.If 命令 w- {0 D7 o$ V" U! V8 P* ~
if 表示将判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式: 7 B2 M) `! ^0 x- r
1、if "参数" == "字符串" 待执行的命令 9 a2 A# ^: G1 a! N- k
参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)
( \9 E" e: Y, }* d: k! M7 g* G如if "%1"=="a" format a:
4 u' z. k5 ]" x+ r& fif {%1}=={} goto noparms
, J$ C3 d$ t) H6 _$ ]# f' V9 e4 M8 U3 {if {%2}=={} goto noparms 3 q" C( I2 ?: r& {$ [. g
2、if exist 文件名 待执行的命令
! t2 l/ R$ q0 c8 g- O如果有指定的文件,则条件成立,运行命令,否则运行下一句。 & y: S6 w G8 a- ?+ D7 C
如if exist config.sys edit config.sys % y9 @- U; A7 C$ U
3、if errorlevel / if not errorlevel 数字 待执行的命令
P0 [; q8 r4 {3 f& W2 r4 g, B如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。 : G3 g$ j e& j. A! w5 {$ q1 L9 Y
如if errorlevel 2 goto x2 ( N* ]2 J# o! n' M$ N* R5 q
DOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码,常见的返回码为0、1。
* s( g. f# X6 @, T5 L# S0 u& U10.for 命令 1 V/ I% O$ ^( l
for 命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。 ( E# [- l* _: X" K5 Z/ e" c: J
在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable . p6 U [, h7 x9 `* y, N- A& x3 z
for {%variable|%%variable} in (set) do command [ CommandLineOptions] % Z G1 D2 W" w
%variable 指定一个单一字母可替换的参数。 6 _6 o/ X# j, H+ N: ?# y
(set) 指定一个或一组文件。可以使用通配符。
2 s$ z0 t+ n/ q( p% `command 指定对每个文件执行的命令。
" ?9 [; @% \0 I$ C! D5 y" mcommand-parameters 为特定命令指定参数或命令行开关。 , H' d) N4 s3 M E4 S
在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable 1 Q% b+ z, v8 ^& k7 |% b T9 T
而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I
1 {. q x9 N2 B如果命令扩展名被启用,下列额外的 FOR 命令格式会受到
( E: z+ |* g, o6 C( x4 G: }支持: 5 O+ z3 ^) F. I c
FOR /D %variable IN (set) DO command [command-parameters]
! s+ j6 i/ r: Y( O. r! L- Q如果集中包含通配符,则指定与目录名匹配,而不与文件 1 o' m- j* Q, |& I6 V5 e% G
名匹配。 - Y* H$ p2 L9 M" y- }6 i
[ad=336,280,left]336x280[/ad]FOR /R [[drive:]path] %variable IN (set) DO command [command- ; @3 N1 p4 P4 P3 M4 t
检查以 [drive:]path 为根的目录树,指向每个目录中的 ; k1 \" R3 {6 {# V) F( R ]* S) ]
FOR 语句。如果在 /R 后没有指定目录,则使用当前 % R. \; O6 w) F" _ e8 a; p+ B
目录。如果集仅为一个单点(.)字符,则枚举该目录树。
' }& i% \- `: c nFOR /L %variable IN (start,step,end) DO command [command-para
X! M, ]- H5 O该集表示以增量形式从开始到结束的一个数字序列。 2 c9 i b$ C: s$ H6 W8 ^
因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生 $ m5 _0 k$ O* {3 j
序列 (5 4 3 2 1)。
! p# r& ?- b3 j# ^0 b" u/ w- QFOR /F ["options"] %variable IN (file-set) DO command ( g( m* i% d! x* ~1 ?% m c# x
FOR /F ["options"] %variable IN ("string" DO command 7 I( w3 g/ ? p" l6 j$ ]4 {+ Y# |* V
FOR /F ["options"] %variable IN (command) DO command . A Q# z' b0 ~% }: }- e2 \
或者,如果有 usebackq 选项: ) \) B1 i: q n9 b `7 B
FOR /F ["options"] %variable IN (file-set) DO command # o. N8 c& ?1 r+ q7 r+ ~
FOR /F ["options"] %variable IN ("string") DO command
% I9 E( R! A! KFOR /F ["options"] %variable IN (command) DO command - \- J9 E! L5 g! e! z, {' n V
filenameset 为一个或多个文件名。继续到 filenameset 中的
) t! s0 n6 N4 O h. u( ?下一个文件之前,每份文件都已被打开、读取并经过处理。
6 o; V& r) I* K' k$ I# F; A处理包括读取文件,将其分成一行行的文字,然后将每行
% g! w; T( e1 O解析成零或更多的符号。然后用已找到的符号字符串变量值 , U% N; A- q; z3 M8 `
调用 For 循环。以默认方式,/F 通过每个文件的每一行中分开
; R) O8 ^& w) Z: u l的第一个空白符号。跳过空白行。您可通过指定可选 "options"
7 g/ L l, C I. o" z, b参数替代默认解析操作。这个带引号的字符串包括一个或多个
! T4 A# O" ^% P1 K6 }指定不同解析选项的关键字。这些关键字为: 2 f7 w1 p9 S6 [( E* @+ ~/ q
eol=c - 指一个行注释字符的结尾(就一个)
8 _; o5 k& t) uskip=n - 指在文件开始时忽略的行数。 / Y5 c) a( y/ {
delims=xxx - 指分隔符集。这个替换了空格和跳格键的 u T( V4 D5 C1 r2 S& ]
默认分隔符集。
4 B* Y+ e' Q' ~tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代
0 j: `# z$ W; E3 C& X% g6 B/ g的 for 本身。这会导致额外变量名称的
w# C* M% E5 c格式为一个范围。通过 nth 符号指定 m ; |6 _5 L' e5 n
符号字符串中的最后一个字符星号,
3 f, n2 E1 P( T* O. F' e7 E那么额外的变量将在最后一个符号解析之
$ u' k" `1 j' m( I* S0 |" b分配并接受行的保留文本。 ' B' O$ U% H9 O, p
usebackq - 指定新语法已在下类情况中使用:
! U$ ]" t4 M( U* Z' \在作为命令执行一个后引号的字符串并且 $ L9 r% `5 }; b) o% b! |
引号字符为文字字符串命令并允许在 fi
1 o+ C$ W( t9 y/ i: K/ T中使用双引号扩起文件名称。 # Q" B7 m) g. L0 X' ?9 r$ s
sample1: + |/ o G: |* t- ?) f2 m7 d
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do command " l9 q5 M4 y; R# h" D7 x& i
会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将
# S# |. P# ^$ L% I, s( b* l每行中的第二个和第三个符号传递给 for 程序体;用逗号和/或
- P* w+ G. Y5 f) G空格定界符号。请注意,这个 for 程序体的语句引用 %i 来 / y0 ^2 X3 p. o* s2 c# W, `
取得第二个符号,引用 %j 来取得第三个符号,引用 %k 7 e1 _5 h0 C( m5 b& a( u; K4 f
来取得第三个符号后的所有剩余符号。对于带有空格的文件
( B* m% y6 l- [名,您需要用双引号将文件名括起来。为了用这种方式来使 # x) I' B$ a9 h
用双引号,您还需要使用 usebackq 选项,否则,双引号会 - a. l! C7 ]* j4 }4 l& n& a
被理解成是用作定义某个要分析的字符串的。
& n7 I2 `* w0 }: i- Y8 O%i 专门在 for 语句中得到说明,%j 和 %k 是通过 ; J3 M) g& M( k4 M
tokens= 选项专门得到说明的。您可以通过 tokens= 一行
- K2 c% \( ]1 Y# Y: W b; O( h指定最多 26 个符号,只要不试图说明一个高于字母 z 或 4 [6 \4 s+ y+ h% U# D5 v1 A
Z 的变量。请记住,FOR 变量是单一字母、分大小写和全局的; ( A/ h5 {: X5 i' q- M7 u
同时不能有 52 个以上都在使用中。 |
|