如果有什么命令不懂,可在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
用這條命令搜索文件真不錯...