知道美河 | 上传资料 | VIP申请 | 精品课程 | 资料搜索 | 问题反馈 | 会员手册 | 积分消费 | 积分充值 | 帐号保护
美河学习学习在线赞助VIP

美河学习在线(主站) eimhe.com

 找回密码
 建立账号
查看: 9938|回复: 1

[原创] DOS下批处理的应用一(快速大量的PING导入到文件)

[复制链接]
发表于 2008-11-28 12:13:17 | 显示全部楼层 |阅读模式
对于网络工程师而言,很多情况下都在测试网络通断情况.在手头没有应用工具软件时,使用DOS这个很多人已忘记的工具,有时候能解决
  I, w5 g0 K- ^1 W1 g& F, C* J4 P( |! D不少问题.虽然DOS没有LINUX下的SHELL语言那么强大,但必竟是WINDOWS下的SHELL.也能干不少事.: y6 V1 a# C0 s! l& w$ ]
DOS命令提示符下,变量使用%来引用.在DOS处理中,变量使用%%来引用.下面看具体例子:
8 t5 }' _* k% p2 }  }6 ]3 f6 ~/ lfor /l %a in (1,1,254) do @ping -n 1 192.168.1.%a |find "Reply from"
0 z2 g$ N5 t7 h这条命令直接在DOS下执行,过几分钟,可看到局域网中192.168.1这个网络地址段的可PING通机器的IP地址.. V2 s- r8 g- e3 N/ K+ ~2 l

  q& C+ F% I5 u1 K) X8 G4 k8 ^) k/ K( Y7 z# W; G) Y2 v, R( c
( S* m( A7 e' e" V, u4 _
  I6 C. o; g/ A- E2 V5 ~4 W
" M) U+ \5 P# K% v: G
: P" m# \5 o6 w( ]. Y

# Z) o' U1 C$ T/ P: a$ D对一组文件中的每一个文件执行某个特定命令。4 g. W- e$ c8 x

: j* h: o4 l( N: j/ T% t/ nFOR %variable IN (set) DO command [command-parameters]
* `+ X5 {( c+ K0 z+ Q8 p5 [/ _
! Q6 I$ j( d* ]& u3 U  %variable  指定一个单一字母可替换的参数。! ~- R. X$ w( l$ w9 K
  (set)      指定一个或一组文件。可以使用通配符。# ~! A# @2 `0 x) w7 R7 ^9 }) B
  command    指定对每个文件执行的命令。
8 j2 S1 L, [3 W$ I* M5 g  command-parameters& Z6 e/ w7 Y7 K% ?% G6 g
             为特定命令指定参数或命令行开关。* j: }( M+ z# s
( V# @8 ?  A' a7 i0 \6 I% m% t
在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable
) E( P& z& v7 ?, @+ U而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.
: Y' v+ j5 z+ a6 S
0 O& W0 j2 z+ D: p* N; i如果命令扩展名被启用,下列额外的 FOR 命令格式会受到
8 j! G; m4 _7 e5 J支持:
$ v# Z+ C+ E; D  \* [
: G" [2 b( e) t' O# H( C8 ]5 x: gFOR /D %variable IN (set) DO command [command-parameters]
. z/ x7 p3 a" g) C; c' e" c& b
* L  ~" p: p9 p# s8 B+ u/ P    如果集中包含通配符,则指定与目录名匹配,而不与文件
( U* {: \! X  S+ W0 i6 D    名匹配。# t/ u5 V' G+ @4 t

. v7 T- p, l' l# E4 s6 w% R+ m  \FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
- ^+ X# w2 h3 {$ I+ e1 W+ Q( t9 I$ ?' ~' Z6 Q
    检查以 [drive:]path 为根的目录树,指向每个目录中的
$ o4 x8 p. _' Y" R    FOR 语句。如果在 /R 后没有指定目录,则使用当前
  s( q3 j8 l9 V0 y: J& V# T2 Q! p    目录。如果集仅为一个单点(.)字符,则枚举该目录树。8 c9 a# v1 p* T6 B7 t' L
5 K" f* s! H5 L4 u* X
FOR /L %variable IN (start,step,end) DO command [command-parameters]0 x5 K& X! s' l7 r9 c* i, {8 |
+ v6 J9 y: g9 ]
    该集表示以增量形式从开始到结束的一个数字序列。7 N; N6 k5 e# B: k+ ?, v! T
    因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生
, z3 [6 w* J! M, c4 }2 \    序列 (5 4 3 2 1)。/ v9 v  c4 c! E: S4 c

( {1 B) }- @/ x" n/ vFOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
, V' U5 _& A1 h" h0 UFOR /F ["options"] %variable IN ("string") DO command [command-parameters]
) n. D, H# q$ b% |FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
: V* P% M* p  z; \# [$ V" N( k2 g* e6 j& J% ?) E. N4 t1 M
    或者,如果有 usebackq 选项:
5 S9 ~* e% g. o& `  y! w5 \' _% [/ M7 @: D& s% g+ u
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
: z# t: c6 H$ S; ~3 m7 VFOR /F ["options"] %variable IN ("string") DO command [command-parameters]) V( B4 ~) r- a% X" Y
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
' B7 s6 c) u9 ?& B4 A4 w) I+ f  ^% p. i3 [* d7 G, a6 L. F' l
    filenameset 为一个或多个文件名。继续到 filenameset 中的. P& S9 R' N) s  q* e" P# i! b
   下一个文件之前,每份文件都已被打开、读取并经过处理。
1 G2 @  L, q- q( `* \, Q! @9 D    处理包括读取文件,将其分成一行行的文字,然后将每行
; t) A5 p# S* z' V+ O    解析成零或更多的符号。然后用已找到的符号字符串变量值
5 i& d6 i$ H! P' C& q    调用 For 循环。以默认方式,/F 通过每个文件的每一行中分开; {- X& y0 r' ^/ T( G7 N; I
    的第一个空白符号。跳过空白行。您可通过指定可选 "options"
- d, G4 ?) b4 x- n; r/ I* F    参数替代默认解析操作。这个带引号的字符串包括一个或多个& o4 d) d2 g7 [8 n
    指定不同解析选项的关键字。这些关键字为:5 Q) Y' h8 {; T& G
6 T4 p$ o! D& X5 Y5 a
        eol=c           - 指一个行注释字符的结尾(就一个)
2 x2 f4 t. T+ w1 f' A4 K2 [- W        skip=n          - 指在文件开始时忽略的行数。( {" M" B4 Q' R5 ^6 w( m7 z
        delims=xxx      - 指分隔符集。这个替换了空格和跳格键的/ W1 Z3 m% O6 z6 E
                          默认分隔符集。: i( J$ Y$ n" r7 G& _5 r
        tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代# z- [# D( W" g. O& j8 O5 ~/ |9 n  e
                          的 for 本身。这会导致额外变量名称的分配。m-n. ?; _3 j( D0 q+ i) a
                          格式为一个范围。通过 nth 符号指定 mth。如果
6 x! D# N. ~4 ^2 G- C6 y* s                          符号字符串中的最后一个字符星号,
1 ~! U7 D9 F& Z# y1 s                          那么额外的变量将在最后一个符号解析之后/ q$ w% T7 t3 j
                          分配并接受行的保留文本。+ C) S" H: x7 k& G6 q, E9 A/ D3 X
        usebackq        - 指定新语法已在下类情况中使用:                    
# O" G. c2 i/ x# K- L: T! Y# U0 o/ Q                          在作为命令执行一个后引号的字符串并且一个单
, ?$ h% E  G- G) Y                          引号字符为文字字符串命令并允许在 filenameset
/ h& D  C) l( @( B6 G4 }4 Z                          中使用双引号扩起文件名称。
; k" d+ T  y7 e  w9 U6 Z' Z- O8 F1 \; E, Z: E" [( N
    某些范例可能有助:
) {1 P# }" ~5 f$ I8 R
, F+ c& ^  ^5 E. D5 H: }; F' H; EFOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k5 H) w2 c( O0 \4 E) U, z

0 g( g$ v  }# [! i7 J4 g9 ]    会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将
  z' O+ W" X$ U    每行中的第二个和第三个符号传递给 for 程序体;用逗号和/或) u1 y' [9 r: P% o. a0 T2 r
    空格定界符号。请注意,这个 for 程序体的语句引用 %i 来$ s2 r  d4 X6 Y7 Y
    取得第二个符号,引用 %j 来取得第三个符号,引用 %k
3 c: e3 M# j5 B- N; f2 l    来取得第三个符号后的所有剩余符号。对于带有空格的文件
( L! A+ r; h* h0 N; L; L* w7 L    名,您需要用双引号将文件名括起来。为了用这种方式来使
/ U: f/ B" r' W  Y4 Y0 j6 F    用双引号,您还需要使用 usebackq 选项,否则,双引号会( O0 V1 }6 p* _1 @5 w& {5 a8 r2 q7 N1 c/ w
    被理解成是用作定义某个要分析的字符串的。
; ^  o' ~3 j; ?3 z: e: Z7 n
1 A, ^! \$ y1 n4 D, K3 a. O% F    %i 专门在 for 语句中得到说明,%j 和 %k 是通过2 P+ e  n' a: I' P+ {' J
    tokens= 选项专门得到说明的。您可以通过 tokens= 一行3 s8 c: l$ X$ L$ w) j6 N+ x
    指定最多 26 个符号,只要不试图说明一个高于字母 'z' 或
& A3 O: l* [* `( B. k& ~    'Z' 的变量。请记住,FOR 变量是单一字母、分大小写和全局的;而且,
: T% U! r1 z  g* f& J8 @+ z    同时不能有 52 个以上都在使用中。3 V" h- b/ P' n) R5 X5 [0 B9 N
, \" |* e( G. J
    您还可以在相邻字符串上使用 FOR /F 分析逻辑;方法是,
1 ~. J) H, k  V  Z% j' i    用单引号将括号之间的 filenameset 括起来。这样,该字符: N, [* y. ^4 }7 {( s6 l9 q
    串会被当作一个文件中的一个单一输入行。! A) p7 D0 \) U( F; ^/ F" ^

' K9 @; Y  h0 N- `    最后,您可以用 FOR /F 命令来分析命令的输出。方法是,将
8 I, P2 j& v; ~! }4 E2 M    括号之间的 filenameset 变成一个反括字符串。该字符串会7 r) r) d4 e0 z% N: x: p9 ]
    被当作命令行,传递到一个子 CMD.EXE,其输出会被抓进' B3 Y0 k  `( f% `6 \' s
    内存,并被当作文件分析。因此,以下例子:6 L4 X2 }0 o, q' l$ l
' }. d3 s! X, b3 Z* N! v( z$ g
      FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
0 k0 F$ l% y* [; ~
# p% C. R) N5 S+ M, n2 V: h; A    会枚举当前环境中的环境变量名称。. J4 z3 |6 {' @. |4 Z) c& ]3 E& }

0 y" g- ]9 N6 g5 K& `! g; v4 T另外,FOR 变量参照的替换已被增强。您现在可以使用下列
# m7 Q0 f9 }3 ]/ G选项语法:& t, A1 B9 U* k4 D7 N! {
/ s! V% V+ B" W+ c( o2 T
     ~I         - 删除任何引号("),扩充 %I
# {+ Q. n- |. t, |4 r' _4 Y     %~fI        - 将 %I 扩充到一个完全合格的路径名
+ T$ _! k# L. G7 Z- o9 p, I     %~dI        - 仅将 %I 扩充到一个驱动器号! q5 o- P& `. r" s1 ^
     %~pI        - 仅将 %I 扩充到一个路径& t/ P' }1 H+ a' K1 c
     %~nI        - 仅将 %I 扩充到一个文件名
! P7 F8 M6 L5 |6 a9 l2 k! Q     %~xI        - 仅将 %I 扩充到一个文件扩展名
6 \) k3 Y  z  W& ^. p     %~sI        - 扩充的路径只含有短名" j: d  i+ S( g) k5 ~
     %~aI        - 将 %I 扩充到文件的文件属性
- F9 y0 b, [" V  u     %~tI        - 将 %I 扩充到文件的日期/时间. A7 F2 s1 I+ M/ u$ |
     %~zI        - 将 %I 扩充到文件的大小* I3 Z4 |' o  j
     %~$PATH:I   - 查找列在路径环境变量的目录,并将 %I 扩充
2 D. h2 n( @9 J. M                   到找到的第一个完全合格的名称。如果环境变量名
3 m8 B& E8 [! \$ t3 b- E* }! ~) e                   未被定义,或者没有找到文件,此组合键会扩充到
+ [& d: |! v0 m! S) u                   空字符串! _) \: C9 H) P) P4 J' \0 \
+ v. ~9 H/ h- _  H6 F0 _; r
可以组合修饰符来得到多重结果:, }' `+ I( X" U/ ~

1 @$ L" q' K# r; q7 c, {2 v# Y     %~dpI       - 仅将 %I 扩充到一个驱动器号和路径8 f: }: J) v2 [6 \- x) h
     %~nxI       - 仅将 %I 扩充到一个文件名和扩展名
( b2 v8 b8 h/ m; s/ T' a8 Q0 r     %~fsI       - 仅将 %I 扩充到一个带有短名的完整路径名8 X7 J4 ^% Z8 F2 s9 u, i8 p
     %~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充/ j( M7 i" D- L) `  p% _
                   到找到的第一个驱动器号和路径。 " Q; U3 i1 J( g% j3 D# c
     %~ftzaI     - 将 %I 扩充到类似输出线路的 DIR* T4 t; ]) ]* o2 p$ D+ M* e& e
$ x4 C4 j) I# _
在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法
4 e" h9 x+ O# q* u! O( V/ n9 e9 g9 [用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名
% d/ i, `# N  ~5 x, L) [2 N9 R比较易读,而且避免与不分大小写的组合键混淆。2 A- F$ A0 V, b2 u) V2 e0 d7 T( R
- h2 t$ B6 d" t- f9 O

! F$ g6 z/ B- ?) v8 c' X2 A8 B---------------------------------------6 i! `6 c6 u5 x2 d0 [
转自 http://www.cnblogs.com/tanzhiwei/
$ P9 t" B/ \% L+ {/ {7 B
% t" w$ J, ]/ I: i& c[ 本帖最后由 深情少年 于 2008-11-28 15:09 编辑 ]

评分

1

查看全部评分

发表于 2008-11-28 13:02:40 | 显示全部楼层
您需要登录后才可以回帖 登录 | 建立账号

本版积分规则

 
QQ在线咨询

QQ|小黑屋|手机版|Archiver|美河学习在线 ( 浙网备33020302000026号 )

GMT+8, 2025-7-11 07:07

Powered by Discuz!

© 2001-2025 eimhe.com.

快速回复 返回顶部 返回列表