发新话题
打印

[转载]win 2000自带工具FOR命令详细解释

[转载]win 2000自带工具FOR命令详细解释

信息来源:http://bbs.fanghei.net/

D:\>for /?

对一组文件中的每一个文件执行某个特定命令。



FOR %variable IN (set) DO command [command-parameters]


  %variable  指定可替换的参数。
  (set)    指定一个或一组文件。可以使用通配符。
  command   指定对每个文件执行的命令。
  command-parameters
         对特定命令所指定的参数。



在批处理文件中使用 FOR 命令时, 指定变量请使用 %%variable

而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.



如果命令扩展名被启用,下列额外的 FOR 命令格式会受到

支持:



FOR /D %variable IN (set) DO command [command-parameters]


   如果集中包含通配符,则指定与目录名匹配,而不与文件
   名匹配。



FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]


   检查以 [drive:]path 为根的目录树,指向每个目录中的
   FOR 语句。如果在 /R 后没有指定目录,则使用当前
   目录。如果集仅为一个单点(.)字符,则枚举该目录树。



FOR /L %variable IN (start,step,end) DO command [command-parameters]


   该集表示以增量形式从开始到结束的一个数字序列。
   因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生
   序列 (5 4 3 2 1)。



FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]

FOR /F ["options"] %variable IN ("string") DO command [command-parameters]

FOR /F ["options"] %variable IN ('command') DO command [command-parameters]


   或者,如果有 usebackq 选项:



FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]

FOR /F ["options"] %variable IN ("string") DO command [command-parameters]

FOR /F ["options"] %variable IN ('command') DO command [command-parameters]


   filenameset 为一个或多个文件名。继续到 filenameset 中的
  下一个文件之前,每份文件都已被打开、读取并经过处理。
   处理包括读取文件,将其分成一行行的文字,然后将每行
   解析成零或更多的符号。然后用已找到的符号字符串变量值
   调用 For 循环。以默认方式,/F 通过每个文件的每一行中分开
   的第一个空白符号。跳过空白行。您可通过指定可选 "options"
   参数替代默认解析操作。这个带引号的字符串包括一个或多个
   指定不同解析选项的关键字。这些关键字为:


      eol=c        - 指一个行注释字符的结尾(就一个)
      skip=n       - 指在文件开始时忽略的行数。
      delims=xxx    - 指分隔符集。这个替换了空格和跳格键的
                  默认分隔符集。
      tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代
                  的 for 本身。这会导致额外变量名称的分配。m-n
                  格式为一个范围。通过 nth 符号指定 mth。如果
                  符号字符串中的最后一个字符星号,
                  那么额外的变量将在最后一个符号解析之后
                  分配并接受行的保留文本。
      usebackq      - 指定新语法已在下类情况中使用:
                  在作为命令执行一个后引号的字符串并且一个单
                  引号字符为文字字符串命令并允许在 filenameset
                  中使用双引号扩起文件名称。


   某些范例可能有助:



FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k


   会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将
   每行中的第二个和第三个符号传递给 for 程序体;用逗号和/或
   空格定界符号。请注意,这个 for 程序体的语句引用 %i 来
   取得第二个符号,引用 %j 来取得第三个符号,引用 %k
   来取得第三个符号后的所有剩余符号。对于带有空格的文件
   名,您需要用双引号将文件名括起来。为了用这种方式来使
   用双引号,您还需要使用 usebackq 选项,否则,双引号会
   被理解成是用作定义某个要分析的字符串的。


   %i 专门在 for 语句中得到说明,%j 和 %k 是通过
   tokens= 选项专门得到说明的。您可以通过 tokens= 一行
   指定最多 26 个符号,只要不试图说明一个高于字母 'z' 或
   'Z' 的变量。请记住,FOR 变量名分大小写,是通用的;而且,
   同时不能有 52 个以上都在使用中。


   您还可以在相邻字符串上使用 FOR /F 分析逻辑;方法是,
   用单引号将括号之间的 filenameset 括起来。这样,该字符
   串会被当作一个文件中的一个单一输入行。


   最后,您可以用 FOR /F 命令来分析命令的输出。方法是,将
   括号之间的 filenameset 变成一个反括字符串。该字符串会
   被当作命令行,传递到一个子 CMD.EXE,其输出会被抓进
   内存,并被当作文件分析。因此,以下例子:


    FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i


   会枚举当前环境中的环境变量名称。



另外,FOR 变量参照的替换已被增强。您现在可以使用下列

选项语法:


    ~I      - 删除任何引号("),扩充 %I
    %~fI      - 将 %I 扩充到一个完全合格的路径名
    %~dI      - 仅将 %I 扩充到一个驱动器号
    %~pI      - 仅将 %I 扩充到一个路径
    %~nI      - 仅将 %I 扩充到一个文件名
    %~xI      - 仅将 %I 扩充到一个文件扩展名
    %~sI      - 扩充的路径只含有短名
    %~aI      - 将 %I 扩充到文件的文件属性
    %~tI      - 将 %I 扩充到文件的日期/时间
    %~zI      - 将 %I 扩充到文件的大小
    %~$PATH:I  - 查找列在路径环境变量的目录,并将 %I 扩充
             到找到的第一个完全合格的名称。如果环境变量名
             未被定义,或者没有找到文件,此组合键会扩充到
             空字符串



可以组合修饰符来得到多重结果:


    %~dpI     - 仅将 %I 扩充到一个驱动器号和路径
    %~nxI     - 仅将 %I 扩充到一个文件名和扩展名
    %~fsI     - 仅将 %I 扩充到一个带有短名的完整路径名
    %~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充
             到找到的第一个驱动器号和路径。
    %~ftzaI    - 将 %I 扩充到类似输出线路的 DIR



在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法

用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名

比较易读,而且避免与不分大小写的组合键混淆。
已知:男人、天使     求证:男人=天使 证明:∵男人=爱+色 又∵爱=爱神=丘比特=长着翅膀=天使 ∴爱=天使   又∵色 古希腊传说 色既是空 ∴色=0 ∴男人=天使+0 ∴男人=天使

TOP

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

  For %variable IN (set) do command [command-parameters],

  %variable——指定一个单一字母可替换的参数

  (set)——指定一个或一组文件,可以使用通配符

  command——指定对每个文件执行的命令

  command-parameters——为特定命令指定参数或命令行开关

在批处理文件中使用 For 命令时,指定变量请使用“%%variable”,而不要用“ %variable”。变量名称是区分大小写的,所以“%i”不同于“%I”。由于For命令的用法和参数非常多,变化复杂,这里因篇幅原因就不再一一罗列了,用户可以在命令提示符后键入“For /?”来获得具体帮助。下面我们将直接进入实战,并结合实战讲述For命令的具体用法。

  1. 给文本文件批量加上落款

  在很多情况下,我们编辑处理完文档,都要给文件加上一个包括“通信地址、QQ、E-MAIL等等信息”的落款,如投往编辑部的稿件。如果只有一篇文章,直接输入倒也罢了,但假如你有很多这样的文件,该怎么办呢?难道每一篇稿件都要手工一个字一个字地输入那一成不变的落款吗?NO!完全没有必要这样费神,我们可以一次性地给所有文件添加上落款,假如我们要给放在“ABCDE”目录下的所有文本文件加上落款。那么就请先建一个名为Address.txt的文本文件,录入通信地址、QQ、E-mail等等信息,保存到E盘的根目录。

  再新建一个文本文件,录入以下内容:

  MD E:\TEMPabcde

  for /r E:\ABCDE %%I in (*.txt) do copy %%I+E:\address.txt E:\tempABCDE\

  for /r E:\tempABCDE %%I in (*.txt) do copy %%I E:\ABCDE\

  echo y|del E:\TEMPabcde

  echo y|rd E:\TEMPabcde

  录入完毕,经检查确认无误后,另存为“给文件加落款.bat”,也保存到E盘的根目录。现在,只需双击此批处理文件,就可以为E:\ABCDE文件夹中所有的TXT文件加上落款。

  提示:For命令指定参数“%I”从“E:\ABCDE”文件夹中的所有文本文件中取值 ;“/r”参数表示包括子目录。

2. 批量获取文件列表

  如果我们需要制作某个目录下的文件清单,如电影文件的文件清单,可以用For命令来轻松完成。我们以制作F盘上的所有RM格式的电影文件的清单为例:

  先在F盘根目录下建一个名为“列文件清单.bat”的文本文件,然后输入以下内容并保存:

  For /r F:\ %%i in (*.rm) DO @echo %%~fi >>F:\RMList.txt

  双击此批处理文件,即可快速列出F盘上所有的以RM为扩展名的电影文件的清单。

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

  3. 快速删除磁盘上的空文件夹

  假设我们要清理D盘上的空文件夹,那么请先用记事本建一个名为“kill.bat”的文件,在该文件中输入以下内容:

  dir d:\ /ad /b /s |sort /r >>d:\kill.txt

  For /f %%i in (d:\kill.txt) DO rd %%i

  echo y |del d:\kill.txt

  先查找并删除全部“Thumbs.db”文件,然后双击该文件,D盘上所有的空文件夹很快就消失的无影无踪了。

  提示:“dir d:\”表示列D盘上的所有目录包括子目录列表,其中参数“/ad”表示列所有目录;参数“/b”表示只列出文件夹名称而不显示标题信息或摘要:参数“/s”表示搜索,即查找D盘中的所有文件夹和子文件夹;“|”是管道符号,将Dir命令的结果传递给“sort”命令;“sort”命令表示排序;“/r”表示逆序列排序。之所以要逆序列排序,是因为通过逆序列排序后,D盘上的所有子文件夹总是会位于其父文件夹的前面,这样在用For命令删除空文件夹时,空的子文件夹被首先删除了,因此空的父文件夹就可以删除了。否则,因空的父文件夹中尚有空的子文件夹,会造成无法删除的情况。“>>d:\kill.txt”的作用是让屏幕回显重新定位到“d:\kill.txt”文件中。

  For 命令中参数“/f”的作用是让For命令从指定的文件中读取数据作为变量,示例是从Dir的结果文件“d:\kill.txt”文件中读取数据,每次读取一行传递给RD命令;RD命令的作用是删除由For命令传递过来的每一个文件夹,因RD命令无法删除尚有内容的文件夹,所以经过For命令的循环后,只是删除了所有的空文件夹,有内容的文件夹会完好无损地被保留下来。

  4. 批量获取局域网中所有IP地址与主机名的对应关系

  如果你是网管,肯定需要获取一张本网段内所有IP地址与主机名的对照表。如果你不想使用第三方软件的话,不妨用For命令试试。

  在命令提示符窗口中输入以下命令:

  For /L %i in (0,1,254) DO ping -a -n 1 192.168..0.%i |Find /i "reply" >>E:\IPAddress.txt

  好了,等命令执行完毕,打开“E:\IPAddress.txt”文件,一张完整的IP与主机名的对照表已经初步形成了,你只需作简单的编辑修改即可打印输出了。

  提示:For命令指定参数“%i”从0开始,每次增加1,直到254为止,即一个C类网段的全部地址。如果用户的局域网自行定义的了IP地址,应根据实际情况设置,如可以为“172.16.0”;“-a”表示获取主机名;“-n -1”表示回显的次数为1次,默认情况下为4次;Find /i "reply“表示查找已响应的主机,即已ping通的主机;“E:\IPAddress.txt”表示将屏幕回显内容输入到“:\IPAddress.txt”文件中。
已知:男人、天使     求证:男人=天使 证明:∵男人=爱+色 又∵爱=爱神=丘比特=长着翅膀=天使 ∴爱=天使   又∵色 古希腊传说 色既是空 ∴色=0 ∴男人=天使+0 ∴男人=天使

TOP

发新话题