本篇為《FOR入門與精通秘籍》的補充内容。由于《FOR入門與精通秘籍》是當初剛開始學FOR時一邊學一邊寫的,思維難免受人家影響,思考的也不夠全面,是以存在很多缺點,但又不想做過多修改,隻好補寫了這篇東西。
在For指令語句的參數F中,最難了解的就是Delims和Tokens兩個選項,本文簡單的做一個比較和總結。
“For /f”常用來解析文本,讀取字元串。分工上,delims負責切分字元串,而tokens負責提取字元串。如果把字元串當作蛋糕,Delims像刀子,用來切蛋糕,tokens像叉子,用來取切好的蛋糕。下面我們用執行個體來進行了解。
把以下内容儲存為文本檔案“歌曲清單.txt”,注意擴充名為“.txt”:
序号、歌手名-歌曲名.字尾名
1、饒天亮-玫瑰夫妻.wma
2、高一首-我不願錯過.mp3
3、黃凱芹-傷感的戀人.MP3
4、黃燦-黃玫瑰.lrc
5、黎姿-如此這般的愛情故事.mp3
代碼1:顯示全部内容
@echo off
for /f %%i in (歌曲清單.txt) do echo %%i
pause>nul
運作結果:
序号、歌手名-歌曲名.字尾名
1、饒天亮-玫瑰夫妻.wma
2、高一首-我不願錯過.mp3
3、黃凱芹-傷感的戀人.MP3
4、黃燦-黃玫瑰.lrc
5、黎姿-如此這般的愛情故事.mp3
講解:
如果不使用參數“/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選項提取。