zoukankan      html  css  js  c++  java
  • cmd中for的用法

    在cmd窗口输入for /?后的原文,被我自己“翻译”了一下,更像人话了。

    推荐去https://www.cnblogs.com/cbugs/p/8992059.html这篇部落格里去看看,讲的更好。

     

    在cmd窗口输入for /?后

    原文“翻译”

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

     

    基本格式:

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

    指令

    含义

    %variable

    指定一个单一字母可替换的参数。

    (set)    

    指定一个或一组文件。可以使用通配符。

    command

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

    command-parameters

    为特定命令指定参数或命令行开关。

       

    注意:

    在批处理程序中使用 FOR 命令时,指定变量请使用 %%variablem,而不要用 %variable。

    此外,变量名称是区分大小写的,所以 %i 不同于 %I.

     

     FOR 命令支持以下形式:

     

    /D 目录

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

     只搜索当前目录而非文件,可以指定通配符。

     

    /R 递归

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

    以 [drive:]path 为根,对每个目录执行FOR语句。

    如果在 /R 后没有指定目录规范,则使用当前目录。

    如果集仅为一个单点(.)字符,则枚举该目录树。

     

    /L 增量序列

    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)

     

    /F 文本、命令分析

    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]

     

    fileset 解析一个或多个文件名。

    String 解析字符串

    conmmand 解析一个命令的结果,可以和tokens连用以用来获取制定命令结果的指定行。

     

    fileset 中的每份文件都被打开、读取并经过处理。

    处理时读取文件,将其分成一行行的文字, 然后将每行解析成零或更多的符号。

    最后用已找到的符号字符串变量值调用 For 循环。 

     

    默认情况下,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白行。

    可以在/F后面添加字符串,其内容及意义如下:

    "options"的内容

    意义

    eol=c  

    指定一个行注释字符的结尾(就一个)。例如eol=;--忽略以分号打头的那些行。

    skip=n   

    指定在文件开始时忽略的行数。例如skip=2 --忽略2行

    delims=xxx

    指定分隔符,可以有多个。

    tokens=x,y,m-n

    指每行的哪一个符号被传递到每个迭代 的 for 本身。这会导致额外变量名称的分配。

    可以使用m-n指定一个范围的变量。

    若指定的最后一个字符是星号,那额外的变量将会分配到最后一个变量解析之后该行剩余的文本。

    usebackq

    若指定的文件名称有空格,则需要对其进行转义。

    但使用‘’或“”会被理解为字符串或命令。

    所以添加该参数以指定新的转义方式。

     

     

    例:

    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 "usebackq" %i in ('abc') do echo %i

    打印abc

     

     

    还可以在相邻字符串上使用 FOR /F 分析逻辑,方法是,用单引号将括号之间的 file-set 括起来。

    这样,该字符串会被当作一个文件中的一个单一输入行进行解析。

     

    可以用 FOR /F 命令来分析命令的输出。

    方法是,使用反引号括起字符串,则该字符串会被当作命令行,其命令结果会输出到内存中并被当作文件分析。

     

    例:

    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 的大写变量名

    比较易读,而且避免与不分大小写的组合键混淆。

  • 相关阅读:
    virtualbox centos安装增强工具和问题详解
    Failed to load SELinux policy. Freezing
    .net mvc项目本地调试:浏览器一直转圈无法访问
    System.Security.Cryptography.CryptographicException: 出现了内部错误
    【SymmetricDS】实现新的数据库方言
    【SymmetricDS】SymmetricDS是如何工作的
    【Java】java.util.Objects 源码学习
    【Spring-web】AsyncRestTemplate源码学习
    【Spring-web】RestTemplate源码学习——梳理内部实现过程
    【Spring-web】RestTemplate源码学习
  • 原文地址:https://www.cnblogs.com/kvii/p/11641155.html
Copyright © 2011-2022 走看看