|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
一.批处理内部命令简介
6 _) r V0 e0 }1.Echo 命令
7 Y8 n! a) ]* Y2 B. B打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。 % \* P0 e9 C% b( \
语法
" g) a, T- t1 x4 \" u9 [% C0 Hecho [{on|off}] [message] " t" ?3 y' i4 @: V
Sample:@echo off / echo hello world
% B6 {* c7 Q6 ?% h) J7 Q在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用> >> ^)结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。 0 g$ Y( i7 r- R/ B7 @
2.@ 命令
& O, j5 _+ k* m表示不显示@后面的命令,在入侵过程中(例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使用的命令啦。
, u; H' A, G1 p, S. q+ m: Z" OSample:@echo off ) `2 L6 b) w. E+ _% r
@echo Now initializing the program,please wait a minite... ' @: w) h- s) i( n9 V
@format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这个参数给我们,效果和/y是一样的。) ( q# m* b* ^ s- W
3.Goto 命令 7 N+ @: L& V- f1 c* b4 t Y! u
指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。
6 i6 T7 C. n' o* x% s$ A6 U6 V' ]语法:goto label (label是参数,指定所要转向的批处理程序中的行。)
. Y$ Q& A. |) w- }* FSample: 3 o6 P" {4 ]) V! E
if {%1}=={} goto noparms
( p: D9 ?. g0 e- n3 F& O7 w/ yif {%2}=={} goto noparms(如果这里的if、%1、%2你不明白的话,先跳过去,后面会有详细的解释。)
6 A D# `7 D! n( s9 D9 M6 V@Rem check parameters if null show usage 0 |$ c: c( }4 Y
:noparms
`) D- d! F4 |0 t" n- i- m) Iecho Usage: monitor.bat ServerIP PortNumber 6 f4 I- M9 W- s5 H5 k0 E2 U' D
goto end 9 Y7 Y1 Z; e% ^
标签的名字可以随便起,但是最好是有意义的字母啦,字母前加个:用来表示这个字母是标签,goto命令就是根据这个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。 ! y; ]% c" S4 ~2 T) ?+ d& A2 g6 h9 Y, ^
4.Rem 命令
' T: W& U/ {8 m1 z9 i注释命令,在C语言中相当与/*--------*/,它并不会被执行,只是起一个注释的作用,便于别人阅读和你自己日后修改。
$ C4 r# l: o+ Y$ JRem Message
2 u2 [9 Y" g! x: a% _Sample:@Rem Here is the description. c0 `( ]2 `, z% _& Z% w$ y& J
5.Pause 命令
# Y8 s7 s' D1 w运行 Pause 命令时,将显示下面的消息:
+ d% j5 B) e. m4 L( fPress any key to continue . . . ( P4 q Z' ^6 F$ o8 K( ~% ?" x
Sample:
) @$ _' @1 V7 T' j@echo off
# [ ?( s1 B& S) {0 |; h:begin 4 M, R# B2 U2 A' X/ r! K
copy a:*.* d:/back
4 F: Y' X+ t/ x7 ^4 k. C3 s Wecho Please put a new disk into driver A * Z; H9 \; D+ P3 C
pause ! T0 C1 X3 w8 ]
goto begin
- _" G) E4 } V* I在这个例子中,驱动器 A 中磁盘上的所有文件均复制到d:/back中。显示的注释提示您将另一张磁盘放入驱动器 A 时,pause 命令会使程序挂起,以便您更换磁盘,然后按任意键继续处理。
; y8 p$ ^% L9 r1 V: T% _ X2 x1 z6.Call 命令 $ N# @1 u/ Y8 t1 {2 W/ ]
从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call,它将不会在命令行起作用。
5 m9 V* }# {2 e( y6 _ h语法
% B9 T) k% J1 B4 i$ [ z8 m7 }call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]
0 P7 i( J( r, [7 j7 ~7 C参数 3 Z m1 i: C+ L
[Drive:}[Path] FileName ' R; C; h% y' {# g$ ?; z
指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。
& N6 x$ {1 M: p% J3 _) h6 ]5 Y. Y7.start 命令 4 O" C4 Y' ?7 f
调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。
; [( O+ Y& |8 ?% n4 ~入侵常用参数:
! a9 h) [' T1 F9 ]+ ^6 mMIN 开始时窗口最小化
* @- b1 Z- p8 t8 A! PSEPARATE 在分开的空间内开始 16 位 Windows 程序
, s. h0 l- \) o; C- O# gHIGH 在 HIGH 优先级类别开始应用程序
( g" H2 }3 n* u6 X7 uREALTIME 在 REALTIME 优先级类别开始应用程序
& O+ `7 g) A: D; f2 i$ y; uWAIT 启动应用程序并等候它结束
8 O( _! Y$ m6 k9 O/ g' e5 dparameters 这些为传送到命令/程序的参数
2 r) p& H8 z3 u4 }0 b执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本内执行,该新行为则不会发生。 - u/ j1 N! N: i {5 J1 i
8.choice 命令 4 X* t: p1 [4 A& O& h
choice 使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提示可输入的字符,之间无空格。它的返回码为1234……
3 F6 J6 ~! x: ~9 n& E% X+ Q如: choice /c:dme defrag,mem,end
7 g3 X! U/ m# S* L& b将显示 . L" K. d( o% \8 o8 E4 _
defrag,mem,end[D,M,E]? 7 x# }/ v. k# M
Sample:
( W! a1 \* P: ?0 s- ?Sample.bat的内容如下: 3 y6 O' F. `: U( |5 w
@echo off ' }2 ?! [% ?/ T; w. o7 D3 e9 P9 ]+ ?
choice /c:dme defrag,mem,end - S1 \6 H( g$ t7 J1 l7 L7 k
if errorlevel 3 goto defrag (应先判断数值最高的错误码) 3 r0 M; h- M# u) p8 ~9 c
if errorlevel 2 goto mem
2 N, ?; A; ~1 U; s# aif errotlevel 1 goto end
$ l7 c F! Z$ p8 R( v:defrag
- w2 _% ]5 K: o9 Q; ?- I& [c:/dos/defrag / e7 t1 Y/ t" P* G
goto end , {* K' u" s* o V$ Q& i
:mem 0 T! k6 |0 |3 d+ B7 [
mem a* Q( |0 f6 R
goto end + A7 D; s( P+ `+ A
:end
; t; o1 M N' S' d. {5 Y$ necho good bye
' ^) r4 l# d( v" x: a) t此文件运行后,将显示 defrag,mem,end[D,M,E]? 用户可选择d m e ,然后if语句将作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,文件结束。 , b; ~3 @1 V/ Z+ Q: G+ [# L
9.If 命令 7 H! a2 |7 b0 ]9 g( x& C
if 表示将判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式: 5 Y3 n3 d/ g: f9 }
1、if "参数" == "字符串" 待执行的命令 : ~# d2 C Q4 e# n2 T
参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)
" W: v9 h- |& c1 o9 E如if "%1"=="a" format a: , W/ @& F2 G; P, j# R" v
if {%1}=={} goto noparms ! j( O* D6 @ v3 `
if {%2}=={} goto noparms
Y/ j8 K$ ^" Z4 b0 Q; @2、if exist 文件名 待执行的命令
4 `/ X4 n: F( w( ~7 {8 f6 F9 r如果有指定的文件,则条件成立,运行命令,否则运行下一句。
5 L/ R2 o% S2 Q$ [% }3 ~/ k如if exist config.sys edit config.sys ' `$ g/ q9 m, \7 r: V
3、if errorlevel / if not errorlevel 数字 待执行的命令
- M7 \ Y0 p Y% ~* ` N* z, g2 E如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。 ) Q: t; V1 T: l+ K; ~
如if errorlevel 2 goto x2
& F$ _9 N- J" b( Q+ ^: uDOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码,常见的返回码为0、1。 " J) B5 W1 @/ S T! _) J W& T3 T
10.for 命令
. _/ F* F* | S4 Ufor 命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。 & o* _' p+ j) U3 P
在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable
& e2 q) M/ t6 h; }+ j; g" sfor {%variable|%%variable} in (set) do command [ CommandLineOptions] & I4 x# M1 \6 J4 T+ A+ D
%variable 指定一个单一字母可替换的参数。 1 C$ H1 Q) [, d" C6 T2 R4 y
(set) 指定一个或一组文件。可以使用通配符。 ' M9 J# Z6 `6 I+ I8 h- _# d, W
command 指定对每个文件执行的命令。 9 T1 a! {. E4 f1 w D0 O: d
command-parameters 为特定命令指定参数或命令行开关。
7 q' u" b) W8 Q1 Q6 e* m) }! r在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable
/ Z3 F3 i" p, v5 `, y而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I
# u& w& t7 }: [3 t: v. \) T3 i如果命令扩展名被启用,下列额外的 FOR 命令格式会受到 3 z- W! f0 P8 \0 Y0 M
支持: ; Q: M! _1 i2 |6 L
FOR /D %variable IN (set) DO command [command-parameters] % i" p5 C" c9 Q! e: i, F* S
如果集中包含通配符,则指定与目录名匹配,而不与文件 : q( `6 i. Q K# p0 A$ C" V/ G# h4 x
名匹配。 , J- R2 w1 T; f3 _/ h- V" X9 G- k$ e
[ad=336,280,left]336x280[/ad]FOR /R [[drive:]path] %variable IN (set) DO command [command-
$ r; i0 [8 f( P. I, Z7 T: c" c; y检查以 [drive:]path 为根的目录树,指向每个目录中的
* ^# n: E' w6 C7 K: y' vFOR 语句。如果在 /R 后没有指定目录,则使用当前
& E9 Z3 M7 \1 R3 S: A目录。如果集仅为一个单点(.)字符,则枚举该目录树。
' r+ g D9 i% j/ W, }FOR /L %variable IN (start,step,end) DO command [command-para 6 `- U4 ]+ W$ Z: B o$ a: {- a
该集表示以增量形式从开始到结束的一个数字序列。 5 V* C5 U9 u7 Y/ }! r4 z
因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生
( h7 f! \. }. G! X+ t序列 (5 4 3 2 1)。
, o: P3 m( b2 o4 gFOR /F ["options"] %variable IN (file-set) DO command 8 P& D# D/ U6 K, z* M) g
FOR /F ["options"] %variable IN ("string" DO command
7 e+ e, J1 y0 t# ]FOR /F ["options"] %variable IN (command) DO command 2 f0 k( }) X _9 K
或者,如果有 usebackq 选项:
^8 @ i0 x/ K: cFOR /F ["options"] %variable IN (file-set) DO command . s2 H! N6 m4 b5 f. n! J
FOR /F ["options"] %variable IN ("string") DO command
, r$ M' w* C; E# P* eFOR /F ["options"] %variable IN (command) DO command " q: F+ Q* D+ d8 p* b6 ?" e. |- }" K
filenameset 为一个或多个文件名。继续到 filenameset 中的
i$ \, n0 j9 e: _下一个文件之前,每份文件都已被打开、读取并经过处理。 " k3 z: C, j$ u7 L( n
处理包括读取文件,将其分成一行行的文字,然后将每行 - B; o! l, T/ N+ ^& w5 V
解析成零或更多的符号。然后用已找到的符号字符串变量值 ! l4 z0 n" q6 g. ]% N7 s
调用 For 循环。以默认方式,/F 通过每个文件的每一行中分开 " O. m6 o. W5 W, j
的第一个空白符号。跳过空白行。您可通过指定可选 "options" 3 ?2 `( ~- {% G# }: W: {" p' [9 i- n
参数替代默认解析操作。这个带引号的字符串包括一个或多个 0 B7 T) r Z) a4 G0 u
指定不同解析选项的关键字。这些关键字为:
- _' |* h2 c# z8 x& neol=c - 指一个行注释字符的结尾(就一个)
, f% @. b8 x& x. x8 C$ |skip=n - 指在文件开始时忽略的行数。
) O8 X' x& p' Y4 ydelims=xxx - 指分隔符集。这个替换了空格和跳格键的
$ d9 [7 ^: H) U默认分隔符集。
1 k! U' R# U3 d( ttokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代 5 j& u, s6 r2 O: [" t
的 for 本身。这会导致额外变量名称的
) _. q* j/ t' Y格式为一个范围。通过 nth 符号指定 m 2 ?. ~! [9 J# F) q6 a! f
符号字符串中的最后一个字符星号,
7 X, u" C( {1 q* h5 T那么额外的变量将在最后一个符号解析之 8 o2 t$ ]6 J8 S* C* m
分配并接受行的保留文本。 " V6 y" q9 ~. V7 a, f+ B& u4 z. T9 S
usebackq - 指定新语法已在下类情况中使用:
6 H1 m, ?( m& ^2 [在作为命令执行一个后引号的字符串并且 2 [& [1 ~/ s0 y; B
引号字符为文字字符串命令并允许在 fi
8 U# j6 D- C+ M: H" {中使用双引号扩起文件名称。 0 @# N8 f' _$ i+ g5 a
sample1:
& p+ r9 |" X' e$ HFOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do command
* o3 @! r* B; T会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将
( E$ Z5 x9 b2 }& D, \7 G$ [7 e每行中的第二个和第三个符号传递给 for 程序体;用逗号和/或
8 z" W. R1 e e空格定界符号。请注意,这个 for 程序体的语句引用 %i 来
9 \5 ]5 M2 Q4 D9 s取得第二个符号,引用 %j 来取得第三个符号,引用 %k
3 i. h! _! ^+ a" _. |: ^2 I8 f来取得第三个符号后的所有剩余符号。对于带有空格的文件 : E. R! c; s! w$ \1 @
名,您需要用双引号将文件名括起来。为了用这种方式来使
1 t+ ^1 d3 O5 r( j4 T, ?) [# W: X用双引号,您还需要使用 usebackq 选项,否则,双引号会
) E4 B# }0 F; s; i" Z* c被理解成是用作定义某个要分析的字符串的。
% M U5 Y6 |; R%i 专门在 for 语句中得到说明,%j 和 %k 是通过 3 y8 X" j5 U: e) [
tokens= 选项专门得到说明的。您可以通过 tokens= 一行 - t4 R# R% M: O6 k; r
指定最多 26 个符号,只要不试图说明一个高于字母 z 或 / [9 n7 U- l9 ^, {, @/ J. e! f
Z 的变量。请记住,FOR 变量是单一字母、分大小写和全局的;
2 B2 ^6 C' D/ }: @ L# k% H5 F同时不能有 52 个以上都在使用中。 |
|