分享

批处理学习12(for的使用-1)

 菜园子图书馆 2014-02-06
在批处理中有很多方法可以实现循环——重复执行某一类操作。例如,显示数列1-5:
  1. 使用 for /l ,这是最基本的:

     

    ::示例1

    @echo off
    for /l %%i in (1 1 5) do echo %%i
    pause

     

  2. 使用 for ,对于变量不多的情况下,也可以:

     

    ::示例2

    @echo off
    for %%i in (1 2 3 4 5) do echo %%i
    pause

     

  3. 使用 goto :

     

    ::示例3

    @echo off
    :hanye
    set /a guxing+=1
    if %guxing% neq 5 goto hanye
    pause

     

  4. 使用 call 和 goto :

     

    ::示例4

    @echo off
    call :han 1 2 3 4 5
    pause
    goto :eof
    :han
    if "%1" neq "" (
    echo %1
    shift /1 &goto han
    )

     

  5. 使用 call 和 for :

     

    ::示例5

    @echo off
    call :han 1 2 3 4 5
    pause
    goto :eof
    :han
    for /l %%i in (1 1 5) do (
    call echo %%1
    shift /1
    )

      这里的 for /l 并不是用来直接显示数字的,而是用来控制递归次数的。

     

  6. 使用 for /f 在一行里显示:

     

    ::示例6

    @echo off
    for /f "delims=" %%i in ("1 2 3 4 5") do echo %%i
    pause

 

实际上:

1,一般产生数列,最常用的是方法1和3,而方法3,则更多用于 for 内部的记数。

2,对文件和文件夹递归,一般使用 for /r 、for /d 与 for /f ,for /f 则常与 dir 等命令组合使用。

3,对文件内容的解析,则主要使用 for /f 。

4,对一般变量的同类操作,则可以使用 for 、for / f 、call 、goto 。

  我们看一下 for 的使用:

 

for 的基本语法

 

语法

 

for {%variable|%%variable} in (set) do command [ CommandLineOptions]

 

参数

 

{%variable|%%variable}
必需。代表可替换的参数。使用 %variable 通过命令提示符执行 for 命令。使用 %%variable 在批处理文件中执行 for 命令。变量要区分大小写,并且必须用 Alpha 值表示,例如,%A、%B 或 %C。
(set)
必需。指定要用指定命令处理的一个或多个文件、目录、数值范围以及文本字符串。需要括号。
command
必需。指定要对包括在指定 (set) 中的每个文件、目录、数值范围以及文本字符串所执行的命令。
CommandLineOptions
指定要通过指定命令使用的任何命令行选项。
/?
在命令提示符显示帮助。

 

  在这里,我们对照示例2,就可以了解他的基本用法:

 

::示例2

@echo off
for %%i in (1 2 3 4 5) do echo %%i
pause

 

  这个示例中,因为是批处理,所以使用了 %%i ,如果在命令提示符下使用,则换成 %i(set) 部分为数字, command [ CommandLineOptions] 部分,就是 echo %%i

注意:

1, Indo 不是参数,但必须将它们与 for 一起使用。如果省略其中任何一个关键字,就会出现错误消息。

2,记住,for variable名是区分大小写、全局的,并且每次总共不超过 52 个是活动的。也就是说, %%i 和 %%I 是不同的变量名。这一点要尤其注意,因为其他变量名,例如 %date% 等,还有自定义变量是不区分大小写的。

3,要避免批处理参数从 %0%9 混淆,对 variable 可以使用除数字 0 到 9 之外的任何字符。对于简单的批处理文件,单个字符即可奏效,例如 %%i

  换句话说,也就是变量名可以是单个字的,任意的。这个单个字是指,对于英文字符,只能是一个,不能是 %han%%ye 这样的;对于中文或其他语言,例如中文,本身一个汉字就占两个字符,所以在这里也就只能是两个字符,例如 %%寒 是允许的;对于数字,也只能是一个字符的,例如 %%1 也是允许的。

  但在实际使用中,为了更好的阅读和修改,推荐只使用一个英文字母,以避免各种不必要的麻烦。例如下命令提示符下运行: for %0 in (1 2 3 4 5) do echo %0 ,很容易让人混淆这里的 %0 是指批处理参数。而且,非字母、数字的变量名,将导致解析时,无法传递程序迭代变量。

4,已经增强了 for 变量引用的替换修改程序。下表列出可选语法(对于任意变量 I)。

 

带有修改程序的变量 说明
%~I 展开删除任何前后引号 ("") 的 %I。
%~fI 将 %I 展开到完全合格的路径名。
%~dI 只将 %I 展开到驱动器号。
%~pI 只将 %I 展开到路径。
%~nI 只将 %I 展开到文件名。
%~xI 只将 %I 展开到文件扩展名。
%~sI 展开路径以只包含短名称。
%~aI 将 %I 展开到文件的文件属性。
%~tI 将 %I 展开到文件的日期和时间。
%~zI 将 %I 展开到文件大小。
%~$PATH:I 搜索 PATH 环境变量所列出的目录,并将 %I 展开到第一个找到的完全合格的名称。如果没有定义环境变量名称,或搜索没有找到文件,则此修改程序扩展成空字符串。

 

下表列出可用来获得综合结果的修改程序组合。

 

变量(使用组合的修改程序) 说明
%~dpI 只将 %I 展开到驱动器号和路径。
%~nxI 只将 %I 展开到文件名和扩展名。
%~fsI 将 %I 展开到只包含短名称的完整路径名。
%~dp$PATH:I 在 PATH 环境变量中所列出的目录中搜索 %I,并展开到第一个找到结果的驱动器号和路径。
%~ftzaI 将 %I 展开到输出行(如 dir一样)。

 

  在上述范例中,可以用其它有效值替换 %I 和 PATH。有效的 for 变量名终止 %~ syntax。使用大写变量名(例如 %I),可以使代码更具可读性,并且避免与不区分大小写的修改程序混淆。 

  我们看一下下面这个示例,显示批处理所在目录的上一层目录:

 

::示例7

@echo off
for %%i in ("%~dp0..") do echo "%%~fi"
pause

 

  在这里, %~dp0.. 是对批处理参数 %0 的扩展, %%~fi 是对 for 的变量 %%i 的扩展,要注意这个区别。

 

For /L 迭代数列的基本语法

 

  在 for 的所有语法中, for /l 是最简单的,他的语法注意事项与 for 相同。

 

语法

 

for /L {%% | %}variable in (start#,step#,end#) do command [CommandLineOptions]

 

  使用迭代变量设置起始值 (start#) ,然后一步步执行一系列设置范围的值,直到该值超过设置的终止值 (end#)。/L 将通过对 start#end# 进行比较,执行迭代变量。如果 start# 小于 end#,就会执行该命令。如果迭代变量超过 end#,则命令解释程序退出此循环。也可以使用负 step# 以递减数值的方式一步步执行此范围内的值。例如,(1,1,5) 生成顺序 1 2 3 4 5,而 (5,-1,1) 则生成顺序 (5 4 3 2 1)。

  他的典型使用,如示例1:

 

::示例1

@echo off
for /l %%i in (1 1 5) do echo %%i
pause

 

注意:

1,当起始值大于终止值时,无论步长为大于等于0的任何数字, command [CommandLineOptions] 都不会被执行。

2,当起始值等于终止值时,无论步长为不等于0的任何数字, command [CommandLineOptions] 都会被执行一次。

3,当步长等于0时,如果起始值大于终止值,则 command [CommandLineOptions] 不会被运行;如果起始值等于或小终止值,则 command [CommandLineOptions] 会被无限循环运行。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多