Bat 批處理之 for f 詳解

2021-05-27 16:08:54 字數 3291 閱讀 2806

bat 批處理之 for/f 詳解  

含有/f的for

格式: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"] 可選

對於for /f %%i in (file) do command

file為檔名,按照官方的說法是,for會依次將file中的檔案開啟,並且在進行到下乙個檔案之前將每個檔案讀取到記憶體,按照每一行分成乙個乙個的元素,忽略空白的行,看個例子。

假如檔案a.txt中有如下內容:

第1行第1列 第1行第2列 第1行第3列

第2行第1列 第2行第2列 第2行第3列

第3行第1列 第3行第2列 第3行第3列

你想顯示a.txt中的內容,會用什麼命令呢?當然是type,type a.txt

for也可以完成同樣的命令:

for /f %%i in (a.txt) do echo %%i

還是先從括號執行,因為含有引數/f,所以for會先開啟a.txt,然後讀出a.txt裡面的所有內容,把它作為乙個集合,並且以每一行作為乙個元素,所以會產生這樣的集合,

//第三個元素

集合中只有3個元素,同樣用%%i依次代替每個元素,然後執行do後面的命令。

具體過程:

用%%i代替「第1行第1列 第1行第2列 第1行第3列」,執行do後面的echo %%i,顯示「第1行第1列 第1行第2列 第1行第3列」,

用%%i代替「第2行第1列 第2行第2列 第2行第3列」,執行echo %%i,顯示「第2行第1列 第2行第2列 第2行第3列」,

依次,直到每個元素都代替完為止。

為了加強理解/f的作用,請執行一下兩個命令,對比即可明白:

for /f %%i in (a.txt) do echo %%i //這個會顯示a.txt裡面的內容,因為/f的作用,會讀出a.txt中

的內容。

for %%i in (a.txt) do echo %%i //而這個只會顯示a.txt這個名字,並不會讀取其中的內容。

通過上面的學習,我們發現for /f會預設以每一行來作為乙個元素,但是如果我們還想把每一行再分解更小的內容,該怎麼辦呢?不用擔心,for命令還為我們提供了更詳細的引數,使我們將每一行分為更小的元素成為可能。

它們就是:delims和tokens

delims 用來告訴for每一行應該拿什麼作為分隔符,預設的分隔符是空格和tab鍵

比如,還是上面的檔案,我們執行下面的命令:

for /f "delims= " %%i in (a.txt) do echo %%i

顯示的結果是:

第1行第1列

第2行第1列

第3行第1列

為什麼是這樣的呢。因為這裡有了delims這個引數,=後面有乙個空格,意思是再將每個元素以空格分割,預設是只取分割之後的第乙個元素。

執行過程是:

將第乙個元素「第1行第1列 第1行第2列 第1行第3列」分成三個元素:「第1行第1列」 「第1行第2列」 「第1行第3列」,它預設只取第乙個,即「第1行第1列」,然後執行do後面的命令,依次類推。

但是這樣還是有侷限的,如果我們想要每一行的第二列元素,那又如何呢?

這時候,tokens跳出來說,我能做到。

它的作用就是當你通過delims將每一行分為更小的元素時,由它來控制要取哪乙個或哪幾個。

還是上面的例子,執行如下命令:

for /f "tokens=2 delims= " %%i in (a.txt) do echo %%i

執行結果:

第1行第2列

第2行第2列

第3行第2列

如果要顯示第三列,那就換成tokens=3。

同時tokens支援萬用字元*,以及限定範圍。

此時的命令為:

for /f "tokens=2,3 delims= " %%i in (a.txt) do echo %%i %%j

怎麼多出乙個%%j?

這是因為你的tokens後面要取每一行的兩列,用%%i來替換第二列,用%%j來替換第三列。

並且必須是按照英文本母順序排列的,%%j不能換成%%k,因為i後面是j

執行結果為:

第1行第2列 第1行第3列

第2行第2列 第2行第3列

第3行第2列 第3行第3列

對以萬用字元*,就是把這一行全部或者這一行的剩餘部分當作乙個元素了。

比如:for /f "tokens=* delims= " %%i in (a.txt) do echo %%i

執行結果為:

第1行第1列 第1行第2列 第1行第3列

第2行第1列 第2行第2列 第2行第3列

第3行第1列 第3行第2列 第3行第3列

其實就跟for /f %%i in (a.txt) do echo %%i的執行結果是一樣的。

再如:for /f "tokens=2,* delims= " %%i in (a.txt) do echo %%i %%j

執行結果為:

第1行第2列 第1行第3列

第2行第2列 第2行第3列

第3行第2列 第3行第3列

用%%i代替第二列,用%%j代替剩餘的所有

最後還有skip合eol,這倆個簡單,skip就是要忽略檔案的前多少行,而eol用來指定當一行以什麼符號開始時,就忽略它。

比如:for /f "skip=2 tokens=*" %%i in (a.txt) do echo %%i

結果為:

第3行第1列 第3行第2列 第3行第3列

用skip來告訴for跳過前兩行。

如果不加tokens=*的話,執行結果為:

第3行第1列

不知道怎麼回事。

再如,當a.txt內容變成:

.第1行第1列 第1行第2列 第1行第3列

.第2行第1列 第2行第2列 第2行第3列

第3行第1列 第3行第2列 第3行第3列

執行for /f "eol=. tokens=*" %%i in (a.txt) do echo %%i結果是:

第3行第1列 第3行第2列 第3行第3列

用eol來告訴for忽略以「.」開頭的行。

同樣也必須加tokens=*,否則只會顯示「第3行第1列」

批處理之 for f 詳解

含有 f的for 格式 for f options i in file do command for f options i in string do command for f options i in command do command 這個可能是最常用的,也是最強的命令,主要用來處理檔案和一...

bat批處理for f命令

含有 f的for詳細說明 含有 f的for有很大的用處,在批處理中使用的最多,用法如下 格式 for f options i in file do command for f options i in string do command for f options i in command do c...

bat批處理 if 命令示例詳解

if 命令示例詳解 if,正如它e文中的意思,就是 如果 的意思,用來進行條件判斷。翻譯過來的意思就是 如果符合某一條件,便執行後面的命令。主要用來判斷,1 兩個 字串 是否相等 2 兩個數值是大於 小於 等於,然後執行相應的命令。當然還有特殊用法,如結合errorlevel if errorlev...