標籤:for 元素 特定 開啟 start type命令 命令 菜單鍵 struct
目錄結構:
contents structure [+]
- 簡介
- for /d ... in ...
- 案例
- 案例:列印C://根目錄下所有的檔案夾名稱
- 案例:列印當前路徑下,只有1-3個字母的檔案夾名
- 案例:顯示所有以window開始的檔案夾名稱
- for /r ... in ...
- 案例
- 案例:顯示目前的目錄及子目錄下的所有以.exe結尾的檔案名稱
- 案例:顯示目前的目錄及子目錄的所有目錄名
- for /L ... in ...
- 案例
- 案例:增加5個CMD視窗
- 監聽 菜單鍵
- delims關鍵字
- tokens關鍵字
- skip和eol關鍵字
一.簡介
在DOS視窗中,輸入for /?查看官方給出的for命令的用法。
FOR %variable IN (set) DO command [command-parameters]%variable 指定一個單一字母可替換的參數。(set) 指定一個或一組檔案。可以使用萬用字元(* 和 ?)。command 指定對每個檔案執行的命令。command-parameters 為特定命令指定參數或命令列開關。 現在開始講每個參數的意思
我們知道了一個for命令的基本格式為:FOR 參數 %變數名 IN (相關檔案或命令) DO 執行的命令。這裡需要注意在DOS視窗中和在批次檔中,for命令的格式有一定的差別,在DOS視窗中,變數以單百分比符號加字母表示,但若是在批次檔中,變數以雙百分比符號加字母表示,批次檔中,for命令的基本格式為:FOR 參數 %%變數名 IN (相關檔案或命令) DO 執行的命令。
參數有四種,分別為/d、/r、/L、/f,每一種參數對應的for命令的具體格式也有所不同。接下來以此講解每一種參數的使用:
接下來的所有案例,若不是特別說明,都是以批次檔的方式。
二.for /d ... in ...
/d表示目錄搜尋,它主要用於搜尋目錄,不會搜尋檔案。
for命令的格式為:FOR /D %%variable IN (set) DO command
如果set包含萬用字元,將對set想匹配的每個目錄執行Command,%%variable代表了每一個目錄。
2.1 案例案例:列印C://根目錄下所有的檔案夾名稱
@echo offrem 進入到c盤根目錄c:rem 列印目前的目錄下的所有檔案夾名稱for /d %%i in (*) do @echo %%ipause
案例:列印當前路徑下,只有1-3個字母的檔案夾名稱
@echo offfor /d %%i in (???) do @echo %%ipause
案例:顯示所有以window開始的檔案夾名稱
@echo offrem 進入到C盤c:rem 顯示所有以window開始的檔案夾名稱for /d %%i in (window?) do @echo %%ipause
三.for /r ... in ...
/r表示遞迴,以遞迴的方式對目前的目錄下的每個目錄執行操作。
for命令的格式為:FOR /R [[drive:]path] %%variable IN (set) DO command
中括弧[]表示可有可無,如果不指定開始遞迴的根目錄,則以目前的目錄作為遞迴的根目錄。
這裡需要注意,若set為點(.),則只枚舉分類樹。
3.1 案例案例:顯示C盤中所有以.exe結尾的檔案名稱
@echo offfor /r c: %%i in (*.exe) do @echo %%ipause
案例:顯示目前的目錄及子目錄下的所有以.exe結尾的檔案名稱
@echo offfor /r %%i in (*.exe) do @echo %%ipause
案例:顯示目前的目錄及子目錄的所有目錄名
@echo offfor /r %%i in (.) do @echo %%ipause
現在清楚了/d 和 /r 參數的同異點了,他們都和目錄有關,但/d只會檢索目前的目錄下的所有目錄,但/r可以以遞迴的方式檢索所有目錄。
四.for /L ... in ...
/L可以寫成小寫字母的/l,為了和數字1區分,下面還是用大寫的字母L。
/L表示迭代變數,在給定的起點、步長、終點迭代資料。
for命令的格式:for /L %%Variable in (Start#,Step#,End#) do Command
使用迭代變數設定起始值 (Start#),然後逐步執行一組範圍的值,直到該值超過所設定的終止值 (End#)。/L 將通過對 Start# 與 End# 進行比較來執行迭代變數。如果 Start# 小於 End#,就會執行該命令。
4.1案例案例:列印1到5
@echo offfor /L %%i in (1,1,5) do @echo %%ipause
案例:增加5個CMD視窗
@echo offfor /L %%i in (1,1,5) do start cmdpause
會發現,新增加了5個CMD視窗,若是(1,1,65535)呢,就會多開啟65535個CMD視窗。如果把上面的start cmd換成 md %%i,那麼就可以多建立5個檔案夾。
五.for /f ... in ...
含有/f的for命令使用最多,
for命令的格式:
FOR /F ["options"] %%i IN (file) DO commandFOR /F ["options"] %%i IN ("string") DO commandFOR /F ["options"] %%i IN (command) DO commandfile代表一個或多個檔案string 代表字串command代表命令["options"] 可選
對於for命令的三個格式都大通小異,IN(file),IN("string"),IN(command)分別表示從檔案、字串、命令中讀取資料。
file為檔案名稱,按照官方的說法是,for會依次將file中的檔案開啟,並且在進行到下一個檔案之前將每個檔案讀取到記憶體,按照每一行分成一個一個的元素,忽略空白的行,看個例子。
假如檔案a.txt中有如下內容:
第1行第1列 第1行第2列 第1行第3列
第2行第1列 第2行第2列 第2行第3列
第3行第1列 第3行第2列 第3行第3列
可以使用type命令來顯示:
@echo offtype a.txtpause
顯示如下:
第1行第1列 第1行第2列 第1行第3列第2行第1列 第2行第2列 第2行第3列第3行第1列 第3行第2列 第3行第3列
使用for命令同樣也可以完成這個功能:
@echo offfor /f "delims=\n" %%i in (a.txt) do echo %%i pause
其中delims=\n表示以分行符號分割,
@echo offfor /f %%i in ("asas daa") do @echo %%ipause
上面的語句會顯示asas。
delims關鍵字
delims關鍵字表示分隔字元,需要注意若不指定delims那麼,預設以空格和Tab鍵分割。如果按照下面的格式使用空格來顯示的話:
@echo offfor /f "delims= " %%i in (a.txt) do echo %%i pause
顯示:
第1行第1列第2行第1列第3行第1列
可以看出值顯示了第一列的值
tokens關鍵字
tokens命令可以指定顯示哪一列的資料,該命令還支援萬用字元(*)
@echo offfor /f "tokens=2,3 delims= " %%i in (a.txt) do @echo %%i %%jpause
效果:
第1行第2列 第1行第3列第2行第2列 第2行第3列第3行第2列 第3行第3列
在上面的命令中多了%%j,這是for命令自動添加上的,通過"tokens=2,3 delims= "表示以空格為分割符號,取沒行的第2和第3列資料。並且把第列的資料賦值給%%i,把第三列的資料賦值給%%j。如果要把第二列和第三列顯示到同一列,那麼可以把tokens=2,3換為tokens=2-3。
對於萬用字元就是把這一行或是剩下的全部元素作為一列資料
@echo offfor /f "tokens=1,*" %%i in (a.txt) do @echo %%i %%jpause
顯示:
第1行第1列 第1行第2列 第1行第3列第2行第1列 第2行第2列 第2行第3列第3行第1列 第3行第2列 第3行第3列
skip和eol關鍵字
skip就是要忽略檔案的前多少行,而eol用來指定當一行以什麼符號開始時,就忽略它。
@echo offfor /f "skip=2 tokens=*" %%i in (a.txt) do @echo %%ipause
【Windows】Windows中解析DOS的for命令使用