批處理FOR 中的Delims和Tokens總結

2021-06-13 06:46:34 字數 2254 閱讀 8685

本篇為《for入門與精通秘籍》的補充內容。由於《for入門與精通秘籍》是當初剛開始學for時一邊學一邊寫的,思維難免受人家影響,思考的也不夠全面,所以存在很多缺點,但又不想做過多修改,只好補寫了這篇東西。

在for命令語句的引數f中,最難理解的就是delims和tokens兩個選項,本文簡單的做乙個比較和總結。

「for /f」常用來解析文字,讀取字串。分工上,delims負責切分字串,而tokens負責提取字串。如果把字串當作蛋糕,delims像刀子,用來切蛋糕,tokens像叉子,用來取切好的蛋糕。下面我們用例項來進行理解。

把以下內容儲存為文字檔案「歌曲列表.txt」,注意擴充套件名為「.txt」:

序號、歌手名-歌曲名.字尾名

1、饒天亮-玫瑰愛人.wma

2、高一首-我不願錯過.***

3、黃凱芹-傷感的戀人.***

4、黃燦-黃玫瑰.lrc

5、黎姿-如此這般的愛情故事.*** 

**1:顯示全部內容

@echo off

for /f %%i in (歌曲列表.txt) do echo %%i

pause>nul

執行結果:

序號、歌手名-歌曲名.字尾名

1、饒天亮-玫瑰愛人.wma

2、高一首-我不願錯過.***

3、黃凱芹-傷感的戀人.***

4、黃燦-黃玫瑰.lrc

5、黎姿-如此這般的愛情故事.***

講解:

如果不使用引數「/f」,執行結果只顯示括號裡的文字字元「歌曲列表.txt」,而不能讀取文字檔案「歌曲列表.txt」中的內容。可見,「/f」是解析文字字串的好工具。 

一、delims

假如只要序號,不要歌手名、歌曲名和字尾名,如何辦到?

**2:預設提取第一列

@echo off

for /f "delims=、" %%i in (歌曲列表.txt) do echo %%i

pause>nul

執行結果:

序號 1

2 3

4 5

講解:

"delims=、"表示定義頓號「、」為分隔符,並用該分隔符「、」切分文字字串。字串就是「歌曲列表.txt」裡的內容,也就是檔案裡的文字和標點符號。

該頓號是原文中就有的。除了頓號「、」,原文中還有減號「-」和點號「.」,因此你也可以用它們來做分隔符。

**3:用減號「-」做分隔符

@echo off

for /f "delims=-" %%i in (歌曲列表.txt) do echo %%i

pause>nul

執行結果:

序號、歌手名

1、饒天亮

2、高一首

3、黃凱芹

4、黃燦

5、黎姿

講解:

因為,當減號「-」被用做分隔符時,每行內容被減號「-」分隔成前後兩半,預設只顯示前半部分,而後半部分連同分隔符減號「-」都被忽略(省略)了。

**4:用點號「.」做分隔符

@echo off

for /f "delims=." %%i in (歌曲列表.txt) do echo %%i

pause>nul

執行結果:

序號、歌手名-歌曲名

1、饒天亮-玫瑰愛人

2、高一首-我不願錯過

3、黃凱芹-傷感的戀人

4、黃燦-黃玫瑰

5、黎姿-如此這般的愛情故事

講解:

預設情況下,單純使用delims而不用tokens時,只顯示第乙個分隔符前的內容,第乙個分隔符和第乙個分隔符後面的內容將被忽略。

**5:定義多個分隔符

@echo off

for /f "delims=、-." %%i in (歌曲列表.txt) do echo %%i

pause>nul

執行結果:

序號 1

2 3

4 5

講解:

原因是,當定義頓號「、」、減號「-」和點號「.」三個標點符號為分隔符後,原文被分隔成四個部分。

如第二行「1、饒天亮-玫瑰愛人.wma」將被分隔成「1」、「饒天亮」、「玫瑰愛人」和「wma」 四個部分。

從第一行到最後一行,每行的每個部分對應下來相當於乙個豎列。因此,原文就有「序號」、「歌手名」、「歌曲名」、「字尾名」四列。

一般情況下,只讀取第一列的內容。後面的內容需要用tokens選項提取。

批處理FOR 中的Delims和Tokens總結

在for命令語句的引數f中,最難理解的就是delims和tokens兩個選項,本文簡單的做乙個比較和總結。for f 常用來解析文字,讀取字串。分工上,delims負責切分字串,而tokens負責提取字串。如果把字串當作蛋糕,delims像刀子,用來切蛋糕,tokens像叉子,用來取切好的蛋糕。下面...

批處理 delims分割字串

使用delims的目的主要是通過切分字串獲得可編輯的字串以便於進行下一步編輯。delims好比一把西瓜刀,文字資訊就好比西瓜,使用delims這把西瓜刀將文字這個西瓜切分成許多小塊,這樣吃起來就方便了。echo off for f delims a in 易經.txt do echo a pause...

批處理delims分割時遇到的問題。。

今天寫了個將檔案每行按逗號分割並取第六行的批處理。但是結果不對。看圖一目了然。for 迴圈的 f 後面的引數是這樣的 然後檔案的內容是這樣的 亮點是倒數第二行。其實6才是第六列的值。其他行第六列都是空。然後我列印出第六列的值。結果如下 說明一點。它列印的是按逗號分割後不為空的第六個數。如果前面有空的...