批处理之for第二篇

for循环语句

for /d 参数 查询目录

for /d %%variable in (set) do command [command-parameters]

  • 主要用于目录搜索, 不会搜索文件
  • 只能搜索指定目录和缺省情况下的当前目录, 不能搜索子目录

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@echo off

echo -------------------------------------------------------
:: 打印c盘目录
for /d %%i in (c:\*) do echo %%i

echo -------------------------------------------------------
:: 打印c盘目录五个字符的目录
for /d %%i in (?????) do echo %%i

echo -------------------------------------------------------
:: 如果路径有空格, 用双引号
for /d %%i in ("c:\Program files\*") do echo %%i

echo ------------------------------------------------------
:: 搜索以w开头的
for /d %%i in (c:\w*) do echo %%i

echo ------------------------------------------------------
:: 搜索以w开头的, 以s结尾的
for /d %%i in (c:\w*s) do echo %%i

echo ------------------------------------------------------
:: 删除当前目录下的文件夹
for /d %%i in (*) do rd /s /q "%%i"
:: 上面的可以写作如下, 测试成功后,把echo 去掉,这时执行命令才会生效,防止出错!
for /d %%i in (*)do echo rd /s /q "%%~fi"

pause

for /r 参数 遍历搜索

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

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
echo ------------------------------------------------------
:: set 中的文件名如果含有通配符(?或*),则列举/R 参数指定的目录及其下面的所有子目录中与 set 相符合的
:: 所有文件,无相符文件的目录则不列举。
for /r %%i in (*.txt) do echo %%i

echo ------------------------------------------------------
:: set 中为具体文件名,不含通配符,则枚举该目录树(即列举该目录及其下面的所有子目录),
:: 而不管set 中的指定文件是否存在。这与前面所说的单点(.)枚举目录树是一个道理,
:: 单点代表当前目录,也可视为一个文件。
for /r %%i in (test.txt) do echo %%i
:: test6.txt不存在也枚举出来
for /r %%i in (test6.txt) do echo %%i
echo ------------------------------------------------------
:: 判断是否存在
for /r %%i in (test.txt) do if exist %%i echo %%i

for /l 参数 建立索引

for /l %%variable in (start,step,end) do command [command-parameters]

该语句中(start,step,end)表示以增量或者递减形式从开始到结束的一个数字序列
因此,(1,1,5)将产生序列1 2 3 4 5,(5,-1,1) 将产生序列5 4 3 2 1

例子:

1
2
3
4
5
6
echo ------------------------------------------------------
for /l %%i in (1,3,10) do echo %%i

echo ------------------------------------------------------
:: for /l %%i in (1,1,5) do start cmd
for /l %%i in (1,1,5) do md %%i