QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 806|回复: 0
收起左侧

[分享] For命令在Windows中的妙用

[复制链接]
发表于 2007-11-25 16:26:29 | 显示全部楼层 |阅读模式 来自: 中国四川成都

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
 在Windows中,我们经常要批量地来完成相同的工作,很多用户往往是上网搜索第三方软件来完成。其实在Windows中,巧妙地利用For命令就可以很轻松地完成很多批量工作。为了更好地理解我们的下一步实战,先让我们来看一下For命令的用法。For命令的具体格式如下: 5 i8 J" z0 O! g

% T6 {; a2 p- }  w: `# d7 P9 W  For %variable IN (set) do command [command-parameters], 2 u' ^: U5 ?& e( X5 \* K: J

! @  R# J; q* }' l  %variable——指定一个单一字母可替换的参数
7 N; j: {5 Y* W/ H! N6 V  j) K8 n. V. `. x: ], A
  (set)——指定一个或一组文件,可以使用通配符 ! b1 g  J- o  }% ?2 J8 L# j
& S. \  w5 O6 T) U; ^$ |# E
  command——指定对每个文件执行的命令 0 u; W. a$ p1 q2 e
# l' \# W: @5 [6 J
  command-parameters——为特定命令指定参数或命令行开关
( x1 ~& d6 Y# c2 _
' C% B2 X; }* V5 T- Y  在批处理文件中使用 For 命令时,指定变量请使用“%%variable”,而不要用“ %variable”。变量名称是区分大小写的,所以“%i”不同于“%I”。由于For命令的用法和参数非常多,变化复杂,这里因篇幅原因就不再一一罗列了,用户可以在命令提示符后键入“For /?”来获得具体帮助。下面我们将直接进入实战,并结合实战讲述For命令的具体用法。
" W, I4 r3 t3 C) @9 d/ p$ M
5 n$ E% S4 d! E3 C) R3 E# v  1. 给文本文件批量加上落款 * m  u8 y5 r4 a& @, T7 p& b( }) A
# b6 l! Q5 o9 [9 t
  在很多情况下,我们编辑处理完文档,都要给文件加上一个包括“通信地址、QQ、E-MAIL等等信息”的落款,如投往编辑部的稿件。如果只有一篇文章,直接输入倒也罢了,但假如你有很多这样的文件,该怎么办呢?难道每一篇稿件都要手工一个字一个字地输入那一成不变的落款吗?NO!完全没有必要这样费神,我们可以一次性地给所有文件添加上落款,假如我们要给放在“ABCDE”目录下的所有文本文件加上落款。那么就请先建一个名为Address.txt的文本文件,录入通信地址、QQ、E-mail等等信息,保存到E盘的根目录。 / ]5 x+ @9 d4 r/ n
8 v1 u# s9 z, A
  再新建一个文本文件,录入以下内容:
$ N2 r8 @3 K" X1 w5 s1 r- F$ J) {
, ?; I+ A, H/ L- M  MD E:\TEMPabcde
3 o0 X; V! t& X8 ]4 ~5 v' X- d( G8 i$ I5 z# O+ L" z/ l2 ]7 _, P
  for /r E:\ABCDE %%I in (*.txt) do copy %%I+E:\address.txt E:\tempABCDE\
9 k  K& g" A& C' F
1 c) i) W* L: Z) H/ d2 b  for /r E:\tempABCDE %%I in (*.txt) do copy %%I E:\ABCDE\
" X8 k% o1 ]$ h5 q$ ]! m7 ]# }* j- T$ C; K; B% N
  echo y|del E:\TEMPabcde
3 D4 g; b$ w5 N& Y8 H# m: \0 s: I9 [) R) Q0 O* }- d
  echo y|rd E:\TEMPabcde
' m: ^  |5 c8 H* Z) p1 G; ]8 `; B; }' n
  录入完毕,经检查确认无误后,另存为“给文件加落款.bat”,也保存到E盘的根目录。现在,只需双击此批处理文件,就可以为E:\ABCDE文件夹中所有的TXT文件加上落款。
$ \5 Q+ r3 P* f6 t/ b' H9 O
5 W6 L' |- y# i  W5 D/ N# g  For命令指定参数“%I”从“E:\ABCDE”文件夹中的所有文本文件中取值 ;“/r”参数表示包括子目录。 , W$ }4 e: m, L! \$ V
4 w" A) E( _3 i: ~( p/ @2 j
  2. 批量获取文件列表
. k( U/ T. Q* e+ M3 a' o. @2 J' F$ c% n4 |
  如果我们需要制作某个目录下的文件清单,如电影文件的文件清单,可以用For命令来轻松完成。我们以制作F盘上的所有RM格式的电影文件的清单为例:
% S6 Y- ]2 d; V! R; A3 M/ d& I# `
  先在F盘根目录下建一个名为“列文件清单.bat”的文本文件,然后输入以下内容并保存: + k8 E, I* i: `

& Q3 S2 ^& L) E9 V* X$ h/ F" @  For /r F:\ %%i in (*.rm) DO @echo %%~fi >>F:\RMList.txt
) `2 |% v/ h( @
  y0 P8 W2 h3 f: {! \3 Q  |- v/ ?3 o  双击此批处理文件,即可快速列出F盘上所有的以RM为扩展名的电影文件的清单。 " p) u0 i% Q: [, N

& j( G2 p3 d, U  b2 \  For命令指定参数“%i”从F盘的所有以RM为扩展名的文件中取值;“@echo %%fi”表示将所有的RM文件及其完整路径显示出来;“>>F\RMList.txt”表示将输出结果重定向到F\RMList.txt文件中,打开该文件,即可看到详细的目录清单;“f”表示完整路径。还可以使用“%n”(文件名)、“%x”(文件扩展名)、“%d”(驱动器)、“%p”(路径)、“%s”(完整路径)、“%t”(文件日期)、“%z”(文件大小)等参数。 $ b- \5 g/ _# q7 u% G

7 G! Z) ]# p8 K. p4 r3 y$ E- a0 |( r  3. 快速删除磁盘上的空文件夹 5 I; L' M2 J+ O' A2 K$ L, Q
; Q0 T7 _5 j  e4 ]6 j/ u& ]
  假设我们要清理D盘上的空文件夹,那么请先用记事本建一个名为“kill.bat”的文件,在该文件中输入以下内容:
( Y( T' k) o9 Z" I! h7 I: m, v( G  H% P0 m' C- Q
  dir d:\ /ad /b /s |sort /r >>d:\kill.txt
7 n$ R0 q, B1 E  G9 h
. m8 k4 s1 t4 C& `' r# t  For /f %%i in (d:\kill.txt) DO rd %%i
; }, J8 ~1 M9 r. V$ b, m) J2 S6 O6 J! d  p, a1 u4 l
  echo y |del d:\kill.txt 5 k2 V/ y: K+ ?5 ^. s+ x
3 m/ ~7 y0 W. w0 v" a- a. _
  先查找并删除全部“Thumbs.db”文件,然后双击该文件,D盘上所有的空文件夹很快就消失的无影无踪了。 2 f- [% u; w3 S1 h
4 J; H3 U# d" e4 ~
  dir d:\”表示列D盘上的所有目录包括子目录列表,其中参数“/ad”表示列所有目录;参数“/b”表示只列出文件夹名称而不显示标题信息或摘要:参数“/s”表示搜索,即查找D盘中的所有文件夹和子文件夹;“|”是管道符号,将Dir命令的结果传递给“sort”命令;“sort”命令表示排序;“/r”表示逆序列排序。之所以要逆序列排序,是因为通过逆序列排序后,D盘上的所有子文件夹总是会位于其父文件夹的前面,这样在用For命令删除空文件夹时,空的子文件夹被首先删除了,因此空的父文件夹就可以删除了。否则,因空的父文件夹中尚有空的子文件夹,会造成无法删除的情况。“>>d:\kill.txt”的作用是让屏幕回显重新定位到“d:\kill.txt”文件中。
0 _7 _5 m' [' O0 X+ B6 d/ p+ U8 z% l
  For 命令中参数“/f”的作用是让For命令从指定的文件中读取数据作为变量,示例是从Dir的结果文件“d:\kill.txt”文件中读取数据,每次读取一行传递给RD命令;RD命令的作用是删除由For命令传递过来的每一个文件夹,因RD命令无法删除尚有内容的文件夹,所以经过For命令的循环后,只是删除了所有的空文件夹,有内容的文件夹会完好无损地被保留下来。
( w* o' l0 T4 R- V; c
' T- c4 B' W: Q9 l+ j6 b  4. 批量获取局域网中所有IP地址与主机名的对应关系
( x" f3 ?/ |. X
7 c2 o3 ^" `9 c  {# B4 y- V  如果你是网管,肯定需要获取一张本网段内所有IP地址与主机名的对照表。如果你不想使用第三方软件的话,不妨用For命令试试。
5 ^: g. j7 ]7 Z! e' ^: `2 E* r0 E" E8 J3 P) ]! f' x  H* O9 t
  在命令提示符窗口中输入以下命令: , H5 ~4 a* A6 |1 V! t1 f
% e6 \$ N2 H# d4 K$ k
  For /L %i in (0,1,254) DO ping -a -n 1 192.168..0.%i |Find /i "reply" >>E:\IPAddress.txt 2 H2 q" I- e8 G3 H9 f3 X

% i# i2 R5 G1 d! ^% x  好了,等命令执行完毕,打开“E:\IPAddress.txt”文件,一张完整的IP与主机名的对照表已经初步形成了,你只需作简单的编辑修改即可打印输出了。
3 E) G' i1 T7 C2 Y$ d9 C$ o
& v" v7 ~* s  B7 E6 O& ^  For命令指定参数“%i”从0开始,每次增加1,直到254为止,即一个C类网段的全部地址。如果用户的局域网自行定义的了IP地址,应根据实际情况设置,如可以为“172.16.0”;“-a”表示获取主机名;“-n -1”表示回显的次数为1次,默认情况下为4次;Find /i "reply“表示查找已响应的主机,即已ping通的主机;“E:\IPAddress.txt”表示将屏幕回显内容输入到“:\IPAddress.txt”文件中。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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