如果有什么命令不懂,可在CMD中输入:name /?
一、基本格式
FOR %%variable IN (set) DO command [command-parameters]
%%variable 指定1个单1字母表示可替换的参数。
(set) 指定1个/1组文件。可用通配符。
command 指定对每个文件执行的命令。
command-parameters 为特定命令指定参数/命令行开关
参数:FOR有4个参数 /d /l /r /f
二、参数/d
FOR /D %%variable IN (set) DO command [command-parameters]
如果Set包含通配符,将对与Set相匹配的每个目录(而不是指定目录中的文件组)执行指定的Command。
这个参数主要用于目录搜索,不会搜索文件:
@echo off
for /d %%i in (c:\*) do echo %%i
pause
运行会把C盘根目录下的全部目录名字打印出来,而文件名字一个也不显示!
@echo off
for /d %%i in (???) do echo %%i
pause
如果当前目录下有目录名字只有1-3个字母的,就会显示出来,没有就不显示了
/D参数只能显示当前目录下的目录名字!
三、参数/R
FOR /R [[drive:]path] %%variable IN (set) DO command [command-parameters]
检查以[drive:]path为根的目录树,指向每个目录中的FOR语句。如果在/R后没有指定目录,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。
递归
/D 只能显示当前路径下的目录名字,/R可把当前/指定路径下的文件名字全部读取!
注意2点:
1、set中的文件名如果含通配符,则列举/R参数指定的目录及其下面的所用子目录中与set相符合的所有文件,无相符文件的目录则不列举。
2、set中为具体文件名,不含通配符,则枚举该目录树(即列举该目录及其下面的所有子目录),而不管set中的指定文件是否存在。这与前面所说的单点(.)枚举目录树是一个道理,单点代表当前目录,也可视为一个文件。
@echo off
for /r c:\ %%i in (*.exe) do echo %%i
pause
咱们把这个BAT保存到D盘随便哪里执行,就会看到,他把C盘根目录和每个目录的子目录下面全部的EXE文件都列出来了
@echo off
for /r %%i in (*.exe) do @echo %%i
pause
以当前目录为搜索路径
@echo off
for /r c:\ %%i in (boot.ini) do echo %%i
pause
枚举c盘所有目录,为了只列举boot.ini存在的目录,可改成:
@echo off
for /r c:\ %%i in (boot.ini) do if exist %%i echo %%i
pause
用这条命令搜索文件真不错...