批處理FOR 中的Delims和Tokens總結(jié)
更新時間:2009年04月27日 18:33:34 作者:
本篇為《FOR入門與精通秘籍》的補(bǔ)充內(nèi)容。由于《FOR入門與精通秘籍》是當(dāng)初剛開始學(xué)FOR時一邊學(xué)一邊寫的,思維難免受人家影響,思考的也不夠全面,所以存在很多缺點(diǎn),但又不想做過多修改,只好補(bǔ)寫了這篇東西。
在For命令語句的參數(shù)F中,最難理解的就是Delims和Tokens兩個選項(xiàng),本文簡單的做一個比較和總結(jié)。
“For /f”常用來解析文本,讀取字符串。分工上,delims負(fù)責(zé)切分字符串,而tokens負(fù)責(zé)提取字符串。如果把字符串當(dāng)作蛋糕,Delims像刀子,用來切蛋糕,tokens像叉子,用來取切好的蛋糕。下面我們用實(shí)例來進(jìn)行理解。
把以下內(nèi)容保存為文本文件“歌曲列表.txt”,注意擴(kuò)展名為“.txt”:
序號、歌手名-歌曲名.后綴名
1、饒?zhí)炝?玫瑰愛人.wma
2、高一首-我不愿錯過.mp3
3、黃凱芹-傷感的戀人.MP3
4、黃燦-黃玫瑰.lrc
5、黎姿-如此這般的愛情故事.mp3
代碼1:顯示全部內(nèi)容
@echo off
for /f %%i in (歌曲列表.txt) do echo %%i
pause>nul
運(yùn)行結(jié)果:
序號、歌手名-歌曲名.后綴名
1、饒?zhí)炝?玫瑰愛人.wma
2、高一首-我不愿錯過.mp3
3、黃凱芹-傷感的戀人.MP3
4、黃燦-黃玫瑰.lrc
5、黎姿-如此這般的愛情故事.mp3
講解:
如果不使用參數(shù)“/f”,運(yùn)行結(jié)果只顯示括號里的文字字符“歌曲列表.txt”,而不能讀取文本文件“歌曲列表.txt”中的內(nèi)容。可見,“/f”是解析文本字符串的好工具。
一、delims
假如只要序號,不要歌手名、歌曲名和后綴名,如何辦到?
代碼2:默認(rèn)提取第一列
@echo off
for /f "delims=、" %%i in (歌曲列表.txt) do echo %%i
pause>nul
運(yùn)行結(jié)果:
序號
1
2
3
4
5
講解:
"delims=、"表示定義頓號“、”為分隔符,并用該分隔符“、”切分文本字符串。字符串就是“歌曲列表.txt”里的內(nèi)容,也就是文件里的文字和標(biāo)點(diǎn)符號。
該頓號是原文中就有的。除了頓號“、”,原文中還有減號“-”和點(diǎn)號“.”,因此你也可以用它們來做分隔符。
代碼3:用減號“-”做分隔符
@echo off
for /f "delims=-" %%i in (歌曲列表.txt) do echo %%i
pause>nul
運(yùn)行結(jié)果:
序號、歌手名
1、饒?zhí)炝?
2、高一首
3、黃凱芹
4、黃燦
5、黎姿
講解:
因?yàn)?,?dāng)減號“-”被用做分隔符時,每行內(nèi)容被減號“-”分隔成前后兩半,默認(rèn)只顯示前半部分,而后半部分連同分隔符減號“-”都被忽略(省略)了。
代碼4:用點(diǎn)號“.”做分隔符
@echo off
for /f "delims=." %%i in (歌曲列表.txt) do echo %%i
pause>nul
運(yùn)行結(jié)果:
序號、歌手名-歌曲名
1、饒?zhí)炝?玫瑰愛人
2、高一首-我不愿錯過
3、黃凱芹-傷感的戀人
4、黃燦-黃玫瑰
5、黎姿-如此這般的愛情故事
講解:
默認(rèn)情況下,單純使用delims而不用tokens時,只顯示第一個分隔符前的內(nèi)容,第一個分隔符和第一個分隔符后面的內(nèi)容將被忽略。
代碼5:定義多個分隔符
@echo off
for /f "delims=、-." %%i in (歌曲列表.txt) do echo %%i
pause>nul
運(yùn)行結(jié)果:
序號
1
2
3
4
5
講解:
原因是,當(dāng)定義頓號“、”、減號“-”和點(diǎn)號“.”三個標(biāo)點(diǎn)符號為分隔符后,原文被分隔成四個部分。
如第二行“1、饒?zhí)炝?玫瑰愛人.wma”將被分隔成“1”、“饒?zhí)炝痢?、“玫瑰愛人”和“wma” 四個部分。
從第一行到最后一行,每行的每個部分對應(yīng)下來相當(dāng)于一個豎列。因此,原文就有“序號”、“歌手名”、“歌曲名”、“后綴名”四列。
一般情況下,只讀取第一列的內(nèi)容。后面的內(nèi)容需要用tokens選項(xiàng)提取。
“For /f”常用來解析文本,讀取字符串。分工上,delims負(fù)責(zé)切分字符串,而tokens負(fù)責(zé)提取字符串。如果把字符串當(dāng)作蛋糕,Delims像刀子,用來切蛋糕,tokens像叉子,用來取切好的蛋糕。下面我們用實(shí)例來進(jìn)行理解。
把以下內(nèi)容保存為文本文件“歌曲列表.txt”,注意擴(kuò)展名為“.txt”:
序號、歌手名-歌曲名.后綴名
1、饒?zhí)炝?玫瑰愛人.wma
2、高一首-我不愿錯過.mp3
3、黃凱芹-傷感的戀人.MP3
4、黃燦-黃玫瑰.lrc
5、黎姿-如此這般的愛情故事.mp3
代碼1:顯示全部內(nèi)容
@echo off
for /f %%i in (歌曲列表.txt) do echo %%i
pause>nul
運(yùn)行結(jié)果:
序號、歌手名-歌曲名.后綴名
1、饒?zhí)炝?玫瑰愛人.wma
2、高一首-我不愿錯過.mp3
3、黃凱芹-傷感的戀人.MP3
4、黃燦-黃玫瑰.lrc
5、黎姿-如此這般的愛情故事.mp3
講解:
如果不使用參數(shù)“/f”,運(yùn)行結(jié)果只顯示括號里的文字字符“歌曲列表.txt”,而不能讀取文本文件“歌曲列表.txt”中的內(nèi)容。可見,“/f”是解析文本字符串的好工具。
一、delims
假如只要序號,不要歌手名、歌曲名和后綴名,如何辦到?
代碼2:默認(rèn)提取第一列
@echo off
for /f "delims=、" %%i in (歌曲列表.txt) do echo %%i
pause>nul
運(yùn)行結(jié)果:
序號
1
2
3
4
5
講解:
"delims=、"表示定義頓號“、”為分隔符,并用該分隔符“、”切分文本字符串。字符串就是“歌曲列表.txt”里的內(nèi)容,也就是文件里的文字和標(biāo)點(diǎn)符號。
該頓號是原文中就有的。除了頓號“、”,原文中還有減號“-”和點(diǎn)號“.”,因此你也可以用它們來做分隔符。
代碼3:用減號“-”做分隔符
@echo off
for /f "delims=-" %%i in (歌曲列表.txt) do echo %%i
pause>nul
運(yùn)行結(jié)果:
序號、歌手名
1、饒?zhí)炝?
2、高一首
3、黃凱芹
4、黃燦
5、黎姿
講解:
因?yàn)?,?dāng)減號“-”被用做分隔符時,每行內(nèi)容被減號“-”分隔成前后兩半,默認(rèn)只顯示前半部分,而后半部分連同分隔符減號“-”都被忽略(省略)了。
代碼4:用點(diǎn)號“.”做分隔符
@echo off
for /f "delims=." %%i in (歌曲列表.txt) do echo %%i
pause>nul
運(yùn)行結(jié)果:
序號、歌手名-歌曲名
1、饒?zhí)炝?玫瑰愛人
2、高一首-我不愿錯過
3、黃凱芹-傷感的戀人
4、黃燦-黃玫瑰
5、黎姿-如此這般的愛情故事
講解:
默認(rèn)情況下,單純使用delims而不用tokens時,只顯示第一個分隔符前的內(nèi)容,第一個分隔符和第一個分隔符后面的內(nèi)容將被忽略。
代碼5:定義多個分隔符
@echo off
for /f "delims=、-." %%i in (歌曲列表.txt) do echo %%i
pause>nul
運(yùn)行結(jié)果:
序號
1
2
3
4
5
講解:
原因是,當(dāng)定義頓號“、”、減號“-”和點(diǎn)號“.”三個標(biāo)點(diǎn)符號為分隔符后,原文被分隔成四個部分。
如第二行“1、饒?zhí)炝?玫瑰愛人.wma”將被分隔成“1”、“饒?zhí)炝痢?、“玫瑰愛人”和“wma” 四個部分。
從第一行到最后一行,每行的每個部分對應(yīng)下來相當(dāng)于一個豎列。因此,原文就有“序號”、“歌手名”、“歌曲名”、“后綴名”四列。
一般情況下,只讀取第一列的內(nèi)容。后面的內(nèi)容需要用tokens選項(xiàng)提取。
相關(guān)文章
根據(jù)輸入的文字實(shí)現(xiàn)輸出倒文的批處理
根據(jù)輸入的文字實(shí)現(xiàn)輸出倒文的批處理...2007-08-08修改Windows Server 2008 R2 的3389遠(yuǎn)程端口的Bat批處理代碼
這篇文章主要介紹了修改Windows Server 2008 R2 的3389遠(yuǎn)程端口的Bat批處理代碼,需要的朋友可以參考下2017-06-06用批處理實(shí)現(xiàn)禁止運(yùn)行指定程序
原理就是通過修改注冊表來實(shí)現(xiàn)的,HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options2008-08-08