批处理之for命令

简述

for命令是cmd中功能最强大的命令之一,for命令作用来执行迭代任务。

下面是msdn中关于for命令语法的参考,建议中文和英文对照阅读,如果只看中文的话。有一些地方的翻译会难以理解,直接看英文原文就很清晰。

https://docs.microsoft.com/zh-cn/windows-server/administration/windows-commands/for

语法

基本语法:

for命令的基础语法如下:

for %i|%%i in (set) do command  [commandlineoptions]
    • 其中%i|%%i为在for中使用的迭代变量。即使在后面的command命令中没有使用到变量%i,变量也是必须声明的,变量名可以使用除%0~%9之外的任意字母,例如%j,%k,%l都是合法的。
    • set可以表示一个需要for循环进行搜索的集合,它可以是字符串,文件路径,或者一系列的值,在set中可以使用通配符 '*'和'?'。
    • 如果直接在命令行中输入使用%i,如果是写在批处理文件中则需要写作%%i。
    • for语句中的变量名是区分大小写,%i和%I会被视为不同的变量。
    • command表示在每次循环中执行名的命令,commandlineoptions表示某些command命令在运行时使用的开关参数,为非必要参数。

  下面是一个基本用法的实例。在我们的e:\test\路径中存在一些文件,我们可以使用for循环带搜索此路径中的所有文件,并打印出文件名。

for %i in (e:\test\*.txt) do @echo %i

 该命令的执行效果如图所示,会列入该目录中所有txt类型的文件,并打印文件名。

或者用for来迭代一系列的值,实例如下:

 

 

 

扩展语法:

     在启用命令扩展的情况下(默认为启用状态),for会有如下几种额外的形式支持:

  • 仅目录查找

    for /d {%%|%}<Variable> in (<Set>) do <Command> [<CommandLineOptions>]

  • 迭代目录

      for /r [[<drive>:]<path>] {%%|%}<variable> in (<set>) do <command> [<commandlinepptions>]

  • 迭代一系列值

    for /l {%%|%}<variable> in (<start#>,<step#>,<end#>) do <command> [<commandlinepptions>]

  • 文件,字符串解析

    for /f [<parsingkeywords>] {%%|%}<variable> in (<set>) do <command> [<commandlinepptions>]
    for /f [<parsingkeywords>] {%%|%}<variable> in (<literalstring>) do <command> [<commandlinepptions>]
    for /f [<parsingkeywords>] {%%|%}<variable> in ('<command>') do <command> [<commandlinepptions>]

  for /f的语法较为复杂,理解起来有一定的难度,for /f中的解析关键字[parsingkeywords]允许使用下面的形式:

  

 

 

  •  eol指定在解析文本文件的行结束符
  • delims指定解析文件时使用的分隔符,默认的分隔符为空格或制表符
  • tokens指定在每行中要传递给%i的标记的索引,如果制定了多个标记,for 语句会分配额外的变量来接受内容,如果最后一个标记为*,for会多分配一个额外的字符串接收*之后额字符串内容。实例如下:

       在我的电脑的e盘的test目录中存在一个zhang2.txt的文件,文件的内容如下:

     

 

      我们使用下面的for /f语句来解析该文件的内容:

       

 

       

 

    还有更多的用法可以尝试。

posted @ 2021-09-20 18:18  Dark_Elf  阅读(1263)  评论(0编辑  收藏  举报