for 循环命令,用于执行重复的操作。

用法:for [param] %var in (set) do command

param:可选参数,可以是 /d /l /r /f 中的一个。

%var:变量名,单个大写或小写英文字母,区分大小写,for 会把每个读取到的值赋给它。

(set):其内容可以是文件、目录或命令,当没有指定路径时默认为当前路径,可以使用 * 或 ? 通配符。

command:将要执行的命令。

(下面将用具体例子对 for 命令进行说明,为了直观,打开 cmd 后输入 echo off 把回显关掉,常用 cls 清屏)


参数:/d

用法:for /d %var in (set) do command

说明:仅对当前或指定目录下的一级非隐藏的文件夹起作用,对文件无效,如果想显示 E:\ 下的文件夹,那么 E:\level01 会显示,E:\level01\level02 不会显示。

① 显示当前目录下的文件夹:for /d %i in (*) do echo "%i"

② 显示具体目录下的文件夹:for /d %i in (C:\*) do echo "%i"

③ 显示具体目录下筛选目录:for /d %i in (C:\windows\sys*) do echo "%i"

④ 显示具体目录下三字文件夹:for /d %i in (C:\windows\???) do echo "%i"

⑤ 对当前目录下的文件夹隐藏:for /d %i in (*) do attrib +h "%i"

⑥ 将文件拷贝到某些文件夹下:for /d %i in (E:\test\*) do copy D:\test.txt "%i"

⑦ 对某些文件夹执行多个命令:for /d %i in (E:\test\*) do (copy D:\test.txt "%i")&&(md "%i"\folder)

(DOS 环境下,如果文件名或目录名中包含空格,操作时会出错的,需要用双引号 "" 将其括起来)


参数:/R

用法:for /r [path] %var in (set) do command

说明:递归。/r 对文件和一级二级三级等所有目录(含隐藏目录)生效,如果在 /R 后没有指定目录,则认为是当前目录。如果 Set 只是一个句点 (.),则只枚举目录树。

① 显示当前目录下的文件夹:for /r %i in (.) do echo "%i"

② 显示具体目录下的文件夹:for /r E:\test %i in (.) do echo "%i"

③ 显示当前目录下的指定文件:for /r %i in (*.txt) do echo "%i"

④ 显示具体目录下的指定文件:for /r E:\test %i in (*.txt) do echo "%i"

⑤ 对指定目录下的文件隐藏:for /r E:\test %i in (*.txt) do attrib +h "%i"

⑥ 对指定目录下的文件夹隐藏:for /r E:\test %i in (.) do attrib +h "%i"

⑦ 将文件拷贝到某些文件夹下:for /r E:\test %i in (.) do copy D:\test.txt "%i"

⑧ 对某些文件夹执行多个命令:for /r E:\test %i in (.) do (copy D:\test.txt "%i")&&(md "%i"\folder)


参数:/L

用法:for /l %var in (Start#,Step#,End#) do command

参数:迭代数值范围,使用迭代变量设置起始值 (Start#),然后逐步执行一组范围的值,直到该值超过所设置的终止值 (End#)。起始值、终止值和步长的组合必须合法,例如,(1,1,5) 生成序列 1 2 3 4 5,(5,-1,1) 则生成序列 (5 4 3 2 1)。

① 显示 1-5: for /l %i in (1,1,5) do echo %i

② 打开 5 个 cmd:for /l %i in (1,1,5) do start cmd

③ 新建 5 个文件夹:for /l %i in (1,1,5) do md E:\test\folder%i


参数:/f

用法:

FOR /F ["options"] %i IN (file) DO command

FOR /F ["options"] %i IN ("string") DO command

FOR /F ["options"] %i IN ('command') DO command

说明:主要用来处理文件和一些命令的输出结果。file 代表一个或多个文件,string 代表字符串,command 代表命令。

options:delims tokens


【 用法一解析 】:

t1.txtt2.txtt3.txt

text01-content:

A01-A02-A03-A04

B01-B02-B03-B04

C01-C02-C03-C04

D01-D02-D03-D04

text02 content:

A01 A02 A03 A04

B01 B02 B03 B04

C01 C02 C03 C04

D01 D02 D03 D04

text03 content:

  A01 A02 A03 A04

B01 B02 B03 B04

 

C01 C02 C03 C04

D01 D02 D03 D04

① for 命令打开一个文本文件后,如以上三个文本文件,会把五行看做一个数组,每一行看做一个元素,如果一行中出现了一个或多个空格,会把第一个空格之前的内容保留,之后去除,如果一行开始即为一个或多个空格,会自动跳过这些空格直到出现字符。此外,for 命令会自动跳过空白行。

for /f %i in (t1.txt) do echo %ifor /f %i in (t2.txt) do echo %ifor /f %i in (t3.txt) do echo %i

text01-content:

A01-A02-A03-A04

B01-B02-B03-B04

C01-C02-C03-C04

D01-D02-D03-D04

text02

A01

B01

C01

D01

text03

A01

B01

C01

D01

② 参数:skip

 说明:忽略文件的前多少行。

for /f "skip=1" %i in (t1.txt) do echo %ifor /f "skip=2" %i in (t2.txt) do echo %ifor /f "skip=3" %i in (t3.txt) do echo %i

A01-A02-A03-A04

B01-B02-B03-B04

C01-C02-C03-C04

D01-D02-D03-D04

B01

C01

D01

C01

D01

③ 参数:eol

 说明:忽略文件中以指定字符开始的行。

for /f "eol=t" %i in (t1.txt) do echo %ifor /f "eol=t" %i in (t2.txt) do echo %ifor /f "eol=t" %i in (t3.txt) do echo %i

A01-A02-A03-A04

B01-B02-B03-B04

C01-C02-C03-C04

D01-D02-D03-D04

A01

B01

C01

D01

A01

B01

C01

D01

④ 参数:delims tokens

 说明:像 t1.txt,每一行还可以进行细分,以 "-" 为分隔符,而 for 命令默认的分隔符是空格和 tab,所以默认情况下,t2.txt 和 t3.txt 均显示第一列。

 用法:"delims=*",* 为分隔符,可以是任意合法的字符,将一行分为若干列。

 "tokens=n",n 为数字,让哪一列或哪几列显示,为 * 时显示全部。如果要显示第二列和第三列,则换成 tokens=2,3 或 tokens=2-3,如果还有更多的则为 tokens=2-10 之类的。需要注意的是,此时要写成这种格式,for /f "tokens=2,3 delims= " %i in (t2.txt) do echo %i %j,因为显示了两部分,且变量必须连续,i 后面是 j,用 k 则会出错,显示几部分就用几个变量。

for /f "tokens=3 delims=-" %i in (t1.txt) do echo %ifor /f "tokens=* delims= " %i in (t2.txt) do echo %ifor /f "tokens=2 delims=0" %i in (t3.txt) do echo %i

A03

B03

C03

D03

text02 content:

A01 A02 A03 A04

B01 B02 B03 B04

C01 C02 C03 C04

D01 D02 D03 D04

3 content:

1 A

1 B

1 C

1 D