含有 F的for 轉)

2021-09-05 22:08:45 字數 3275 閱讀 7163

**:

含有/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列」

含有 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 command 這個可能是最常用的,也是最強的命令,主要用來處理檔案和一...

JSON 轉含有泛型屬性的物件

在將 json 字串轉為物件時,如果物件含有泛型,在進行轉換時需要指明泛型型別。describe author chenfan date 2019 5 9 19 15 data 含有泛型屬性的物件 class onegeneric data 泛型物件 class keymessage public ...

對mongodb含有大寫英文本母的字段轉為小寫

今天產品經理給我乙個任務,說頁面顯示的英文本母有大寫的,看起來非常難受,讓我把大寫的字母都變成小寫的。var find db 你所操作的表名 find limit 40 find.foreach function event 值得注意的是 我上面的是這種格式查詢 find 第乙個大括號是查詢條件,第...