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

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

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

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

[复制链接]
发表于 2008-11-28 12:13:17 | 显示全部楼层 |阅读模式
对于网络工程师而言,很多情况下都在测试网络通断情况.在手头没有应用工具软件时,使用DOS这个很多人已忘记的工具,有时候能解决4 @, r1 d! [; Y* y  ~
不少问题.虽然DOS没有LINUX下的SHELL语言那么强大,但必竟是WINDOWS下的SHELL.也能干不少事.
* q2 p7 E6 Q" K, D' U3 t1 I2 kDOS命令提示符下,变量使用%来引用.在DOS处理中,变量使用%%来引用.下面看具体例子:
9 X' r- P, q3 h0 L/ q* m5 gfor /l %a in (1,1,254) do @ping -n 1 192.168.1.%a |find "Reply from"! C6 A, [* \2 R& A
这条命令直接在DOS下执行,过几分钟,可看到局域网中192.168.1这个网络地址段的可PING通机器的IP地址.
& T% G& r. C) @+ J+ P: {# F: x5 S/ i% I* d4 X6 b" a7 X

& l+ B  Z5 Y% Q. [' G" z& a9 ?' A1 F0 O6 j- e
% E/ V- d  y- X* T
% S4 r+ A4 ?: v" q+ S
0 Y' w# z& J& t7 b& S3 I

! l2 G/ B$ H5 o- A' g6 y# m" [对一组文件中的每一个文件执行某个特定命令。
8 T5 Z/ e; _& V: H% p' Q; U7 I# s- y. J0 S1 v
FOR %variable IN (set) DO command [command-parameters]. c7 _& G: E' L4 P8 {
5 P: I" ^$ u2 B
  %variable  指定一个单一字母可替换的参数。
# a; X& d, z) E  (set)      指定一个或一组文件。可以使用通配符。
: G" r! `6 [, E# M  p" b1 X  command    指定对每个文件执行的命令。
, a' E- O7 L$ D5 F8 |( E- V  command-parameters! ?% Z$ X: k3 G& g
             为特定命令指定参数或命令行开关。
  V( t$ O, `) t, d8 \. _4 o
" c+ ]7 P. [2 d3 B在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable " H7 j- p& |( V+ O4 \3 X
而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.# P2 k) f* f8 K7 {8 l
0 ]9 g, P* w4 v* x7 B4 F, R
如果命令扩展名被启用,下列额外的 FOR 命令格式会受到# W, k/ O- a& w4 N1 G7 b# r( B2 J* p
支持:' y2 c) D6 Y% W$ Y7 g* [" l
! D/ P6 [8 s; c6 ^
FOR /D %variable IN (set) DO command [command-parameters]8 F7 j8 ~5 Y, r" J. C1 E) |% z" q

5 q  I7 m) s  T    如果集中包含通配符,则指定与目录名匹配,而不与文件
7 D. F; ]# {% m' ]/ h, b    名匹配。0 F* Q9 f" z1 ~" S4 @7 H

" ^& _1 H: z9 _6 A9 b4 RFOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]: v# J# I- _, `/ V2 ~4 |+ V
5 W  h# z/ e8 |  g1 S6 a# p' T
    检查以 [drive:]path 为根的目录树,指向每个目录中的! r. h2 [. q  M. f6 u3 {, L
    FOR 语句。如果在 /R 后没有指定目录,则使用当前4 |5 _/ z( W' m( Q  S9 }
    目录。如果集仅为一个单点(.)字符,则枚举该目录树。
6 q! i$ H& f) s& R$ I' A
! R! a7 T, l2 Z4 L5 r. P  MFOR /L %variable IN (start,step,end) DO command [command-parameters]
* r' L2 t% N: `
( W. }- W# g0 K0 D( i! j- o! Z    该集表示以增量形式从开始到结束的一个数字序列。: Q$ A! J& [) F) f0 l
    因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生
4 X" F4 T7 O1 U. e3 {# V. g    序列 (5 4 3 2 1)。8 K2 [: l- l# Q# r
- R" O0 X# I6 b6 I$ n
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]. T  Q' o8 m  @: R# F! S  A
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]0 y1 K4 M2 R7 `+ l9 p
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]! G3 A/ b8 A# Z# h/ N

" V3 f4 b& ~& S2 N. t% }2 b    或者,如果有 usebackq 选项:
+ t$ t: @- ^/ {# r8 e5 c
, t- M- @/ y* E3 m) pFOR /F ["options"] %variable IN (file-set) DO command [command-parameters], J' ?- V# X' |7 j
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
' g$ k" R* Y) N3 ]/ ?FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
/ X+ g; W" {! q( f4 f- g9 u0 o# [) \( o. g  Q9 {7 O, V
    filenameset 为一个或多个文件名。继续到 filenameset 中的
. B, Q" p+ d' x" z- J, i0 w   下一个文件之前,每份文件都已被打开、读取并经过处理。9 L  w+ r- j' z5 X
    处理包括读取文件,将其分成一行行的文字,然后将每行3 q  Z3 U$ n4 ]
    解析成零或更多的符号。然后用已找到的符号字符串变量值# z& j1 ~9 J1 b) T
    调用 For 循环。以默认方式,/F 通过每个文件的每一行中分开
- }/ Q* a' Z0 i/ h- B! @    的第一个空白符号。跳过空白行。您可通过指定可选 "options"
6 J; m. `: y0 ]! [# P5 h' P4 m    参数替代默认解析操作。这个带引号的字符串包括一个或多个# a1 r. [0 j1 ?- Z* @
    指定不同解析选项的关键字。这些关键字为:# d; e/ j7 w7 W  x3 X- e. R) O
, f- @- W; f, \! W8 O8 e
        eol=c           - 指一个行注释字符的结尾(就一个)3 k8 q' F: i: i7 _2 v+ i, D
        skip=n          - 指在文件开始时忽略的行数。0 `5 G7 C' e8 S* a! e; j) m$ X/ c! u, Q
        delims=xxx      - 指分隔符集。这个替换了空格和跳格键的
# ?% C( }7 J6 b  v                          默认分隔符集。
! r6 n( b1 T  q2 m5 U: W) S        tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代
% D* Q/ N( g- |4 ~0 v7 ?                          的 for 本身。这会导致额外变量名称的分配。m-n3 p- S# w, e& ]; n9 N* E
                          格式为一个范围。通过 nth 符号指定 mth。如果0 t6 E$ O7 U6 T+ B! \
                          符号字符串中的最后一个字符星号,
) E$ N. F5 O8 Z: A: j4 H; b                          那么额外的变量将在最后一个符号解析之后7 g; D6 c- }& }
                          分配并接受行的保留文本。) b5 z& C6 c) o. e- }  V7 n0 K
        usebackq        - 指定新语法已在下类情况中使用:                    / v4 C. o" z4 b8 J9 H1 R2 R
                          在作为命令执行一个后引号的字符串并且一个单; r! D6 d" M1 e+ X1 _( o
                          引号字符为文字字符串命令并允许在 filenameset, ~! J1 Z' ~! ]; S, v
                          中使用双引号扩起文件名称。
  N# s  b" q  b6 L/ R1 p' H$ V& |! x" q# ]
    某些范例可能有助:, K. q2 H% w7 s* b/ V% u" R

# ~! x. Q( s5 {' ^. q- PFOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k; v" C/ f- `- t+ s: A
- q) r; {4 m) ?2 l4 b' Q; H6 d
    会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将$ {- S) z: m* f9 y3 o* k' d1 ^
    每行中的第二个和第三个符号传递给 for 程序体;用逗号和/或
: y2 ]% T% V$ K/ J0 V' _+ f$ ]: ]  c    空格定界符号。请注意,这个 for 程序体的语句引用 %i 来
6 Y6 J. }3 }( b+ i( P" u9 F    取得第二个符号,引用 %j 来取得第三个符号,引用 %k
3 s7 I7 b5 g+ S8 D0 E    来取得第三个符号后的所有剩余符号。对于带有空格的文件; H) T; [! M8 m. k2 X, |
    名,您需要用双引号将文件名括起来。为了用这种方式来使3 U! M% s0 A; \! P0 q* d! P' W
    用双引号,您还需要使用 usebackq 选项,否则,双引号会
$ C2 s! |4 u* H8 D' K) q    被理解成是用作定义某个要分析的字符串的。
- B0 a6 L; t. ^) L* U3 M/ k3 \2 r3 o
    %i 专门在 for 语句中得到说明,%j 和 %k 是通过
1 ]+ T& _0 X+ m& ~' @- D    tokens= 选项专门得到说明的。您可以通过 tokens= 一行
$ @; S; z9 [( f+ n5 b    指定最多 26 个符号,只要不试图说明一个高于字母 'z' 或
. j7 h' i+ `0 @    'Z' 的变量。请记住,FOR 变量是单一字母、分大小写和全局的;而且,
% ]8 A+ a1 O  U7 e    同时不能有 52 个以上都在使用中。) A+ a! F) K2 P6 u1 q
! N! H' f6 N8 w7 Q3 b8 F, X% ]; e
    您还可以在相邻字符串上使用 FOR /F 分析逻辑;方法是,1 t- z8 ~0 u* }: [
    用单引号将括号之间的 filenameset 括起来。这样,该字符, d9 ?; Q5 B+ ]' C: Q
    串会被当作一个文件中的一个单一输入行。9 B$ t6 u, P' n; ~3 d' r! I+ g. G
! z& I+ m0 a' N$ g+ T: e
    最后,您可以用 FOR /F 命令来分析命令的输出。方法是,将" D2 r0 [+ n: G- |6 @4 z7 S# c
    括号之间的 filenameset 变成一个反括字符串。该字符串会. }. b8 c* Q  N; F7 y4 I
    被当作命令行,传递到一个子 CMD.EXE,其输出会被抓进: F  R' g2 y! M$ ~' A) [$ J- l
    内存,并被当作文件分析。因此,以下例子:
4 m3 X9 l' a- g. r$ p5 d! f7 k
* A4 t9 G, }' o8 {      FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
" S3 x6 D7 N' n6 q% R2 {; F2 l# b' R+ L5 f
    会枚举当前环境中的环境变量名称。. \5 p* T0 K) t( Q" j  w/ v+ \. o7 ^

( Y1 k+ b+ i# w/ ]% I" z' Q9 ]" x3 R$ M另外,FOR 变量参照的替换已被增强。您现在可以使用下列% r/ P% W# K2 ^
选项语法:
# b1 v8 F+ _+ I
' L. _! s" i) @: E# ]* r     ~I         - 删除任何引号("),扩充 %I
7 |1 h5 {  {% ?3 P9 Z     %~fI        - 将 %I 扩充到一个完全合格的路径名
1 ~& _; D, U/ D# S     %~dI        - 仅将 %I 扩充到一个驱动器号  ~" e2 G5 V4 v. \2 m( P8 f
     %~pI        - 仅将 %I 扩充到一个路径
0 Y8 E0 n2 v4 W/ O/ @     %~nI        - 仅将 %I 扩充到一个文件名
7 K: }, b  q, }5 v     %~xI        - 仅将 %I 扩充到一个文件扩展名5 @. m2 C8 y' ?) H
     %~sI        - 扩充的路径只含有短名( t. K5 P/ H/ b7 _4 F2 Q7 ~
     %~aI        - 将 %I 扩充到文件的文件属性
% U8 q. ?3 F5 q9 F) W     %~tI        - 将 %I 扩充到文件的日期/时间8 r/ _* v$ o' D$ l
     %~zI        - 将 %I 扩充到文件的大小
- U- R1 R$ j' @0 ?- V* O5 B, b     %~$PATH:I   - 查找列在路径环境变量的目录,并将 %I 扩充
" B! E( T/ r7 t( }# Y! x                   到找到的第一个完全合格的名称。如果环境变量名# ?0 ~$ [8 B9 T3 V, ?
                   未被定义,或者没有找到文件,此组合键会扩充到7 Z" s* h: J0 V/ T# P5 S
                   空字符串2 B- P( G# q  Y9 ^
  V9 k% W* w5 C  L: }- y
可以组合修饰符来得到多重结果:  ^/ d% @4 `2 c1 M9 k  ?! p. O3 p
+ Z5 c4 z4 J: ?2 H8 B* @
     %~dpI       - 仅将 %I 扩充到一个驱动器号和路径* r' h; y0 \. H) ?
     %~nxI       - 仅将 %I 扩充到一个文件名和扩展名( \# `# ~. Y  ?, j# A
     %~fsI       - 仅将 %I 扩充到一个带有短名的完整路径名4 H+ ~% Q# {% M( U) f
     %~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充/ t) d& Z+ P6 v1 Z
                   到找到的第一个驱动器号和路径。 * A! F' P% N- d( ?3 c4 F
     %~ftzaI     - 将 %I 扩充到类似输出线路的 DIR/ {7 R, ~. H) f
( _: ?, l( b" |! ~# Z0 t0 F
在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法) C4 o8 o5 T- A1 t( \1 A& \
用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名: {2 w& \8 e5 x! A2 Z. J* [
比较易读,而且避免与不分大小写的组合键混淆。
% Y# O+ c5 R" e- ]8 ]/ H) K/ ]' H9 \2 y0 d

3 k) Z- |+ N3 u! M---------------------------------------
3 f9 k1 l3 n& {8 x  b转自 http://www.cnblogs.com/tanzhiwei/9 A5 P) W+ }& N: e  K
* H" x+ O( }( t- {5 P" K4 q
[ 本帖最后由 深情少年 于 2008-11-28 15:09 编辑 ]

评分

1

查看全部评分

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

本版积分规则

 
QQ在线咨询

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

GMT+8, 2025-9-5 14:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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