For 命令的使用

来源:互联网 发布:阿里云服务器默认账号 编辑:程序博客网 时间:2024/06/09 07:31

For 命令用于对一系列文件执行一个特定的命令,也有很多扩展,如下文, 功能很强大,使用有点麻烦。

 

它的完整语法是:

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

 

其中:

  • %variable 是单字母变量
  • set 是一个或者多个文件,可使用通配符
  • command 是对 set 中的每一个文件要执行的命令,可以是系统命令,脚本,第三方程序等。

注意:

  • 如果在批处理中使用For命令,应该将 %variable 改为 %%variable
  • 批处理文件中,变量名是区分大小写的,也就是说 %a 和 %A 是不同的

 

如果enable了命令扩展,可以支持以下的额外形式和额外功能。

 

  1. 加入/D:     For /D %variable IN (set) Do command [command-parameters]
    功能: set 中如果有通配符,将用来匹配目录名,而不是基本命令中的文件名。也就是说,对set中的每个目录执行特定的命令
  2. 加入/R:     For /R [ [drive: ] path ] IN (set) Do command [command-parameters]
    功能: 从[drive: ] path 开始,对所有目录和子目录执行特定的命令。 如果 [drive: ] path 为空,没有指定任何目录,则仅对当前目录执行 For 命令。 如果 set 是一个 “ . ” 点号,则仅枚举目录
  3. 加入 /L:     FOR /L %variable IN (start,step,end) DO command [command-parameters]
    功能:  这时,set是一个数列,start是起始数, step是增加量,end是终止数。 对这个数列执行特定的命令。
  4. 加入 /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]


file-set 是一个或者多个文件名,每个文件都被打开,读取,处理。读取时,每个文件都被分为单个的行(忽略空行),每行都解析为 0个或者多个 token。  For 语句然后将token的值 赋与 %variable 变量。 缺省时, /F 传递每个文件中的每行中的第一个分离的token。可以用 option 来修改这个缺省的解析行为。

 

Option 中的关键字是:

 

  • eol=c   指定一个行注释字符(忽略这个字符起始的行)
  • skip=n 指定忽略文件中最开始的n行
  • delims=xxx 指定分隔符,缺省时,使用空格和tab作为分隔符
  • Tokens=x,y,m-n
    • 指定应该将哪些 token 的值传送给 For 命令中的 特定命令去处理
    • 如果指定了多个token,就会自动分配多个变量
    • m-n 是制定范围来设置传值的token
    • Token= 的如果最后一个字符是星号"*",则自动分配额外的变量,来接收从最后一个token之后的行内的剩余文字。
  • 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]

也就是 “” 双引号变成 ‘ ‘ 单引号。 ’ ‘ 单引号变成 ` ` 反引号 (就是 “ ~ ” 这个键)

 

样例:

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

    解析 myfile.txt, 忽略分号起始的行,以逗号或者空格为分隔符,解析每行第二个和第三个token。第二个token的值赋给 %i, 第三个token的值赋给 %j ,其它token的值赋给%k (%j, %k 是隐式自动创建的)。 如果文件名中有空格,应该用双引号括起来。Token行最多指定26个token

 

还可以使用 For /F 来解析一个字符串: 在 set 中使用 单引号,这时,set 段就会被当做一个文件中的一行来处理。

 

还可以使用 For /F command 来解析命令输出: 在 set 中使用反引号,这时,set段会被当做一个命令行并传递给一个子cmd.exe,它的输出会被捕捉到内存中并被解析,就好像它是一个文件一样。

 


还可以有以下修饰符来增强 For 变量代换:
 %~I 扩展 %I,删除包围的引号 “”     -----  %I --- 大写的 i
 %~fI 扩展 %I 为完全路径名
 %~dI 扩展 %I 为仅驱动器字符
 %~pI 扩展 %I 为仅路径名
 %~nI 扩展 %I 为仅文件名
 %~xI 扩展 %I 为仅文件扩展名
 %~sI 扩展 %I 为包括短文件名的路径
 %~aI 扩展 %I 为完全路径名
 %~tI 扩展 %I 为文件的日期时间
 %~zI 扩展 %I 为文件大小
 %~$PATH:I 搜索PATH变量,将 %I 扩展为发现的第一个完全路径。如果PATH环境变量未定义或者文件未找到,则扩展为空字符串

 

修饰符可以叠加,例如

 %~dpI 扩展为驱动器符和路径名
 %~nxI 扩展为文件名和扩展名
 %~fsI 扩展为完全路径名+短文件名
 %~dp$PATH:I
 %~ftzaI

 

 

Ok,先到这里,以后再举例说明

 

 

 

 

 

原创粉丝点击