二、tokens
假如只要歌手名和歌曲名,不要序號和字尾名,如何辦到?
**6:提取單列
@echo off
for /f "tokens=2 delims=、." %%i in (歌曲列表.txt) do echo %%i
pause>nul
執行結果將顯示:
歌手名-歌曲名
饒天亮-玫瑰愛人
高一首-我不願錯過
黃凱芹-傷感的戀人
黃燦-黃玫瑰
黎姿-如此這般的愛情故事
講解:用delims定義頓號「、」和點號「.」作為分隔符,將原文分成三部分。
如第六行「5、黎姿-如此這般的愛情故事.***」被分割成:
第一部分(第一列):5
第二部分(第二列):黎姿-如此這般的愛情故事
第三部分(第三列):***
「tokens=2」表示用tokens提取第二列的字串,即「黎姿-如此這般的愛情故事」。
沒有被tokens定義提取的第一列和第三列將被忽略。
假如只要序號和歌曲名,而不要歌手名和字尾名,如何辦到?
**7:提取多列
@echo off
for /f "tokens=1,3 delims=、-." %%i in (歌曲列表.txt) do echo %%i %%j
pause>nul
執行結果將顯示:
序號 歌曲名
1 玫瑰愛人
2 我不願錯過
3 傷感的戀人
4 黃玫瑰
5 如此這般的愛情故事
講解:「delims=、-.」表示定義頓號、減號和點號為分隔符。
「tokens=1,3」表示只提取第一列和第三列。
「%%i %%j」對應於「token」後面的列數。有多少列就要有多少個輸出變數,並且各變數中的字母存在先後順序。
如何只提取文字,不要標點符號?
**8:忽略分隔符
@echo off
for /f "tokens=1,2-4 delims=、-." %%i in (歌曲列表.txt) do echo %%i %%j %%k %%l
pause>nul
執行結果:
序號 歌手名 歌曲名 字尾名
1 饒天亮 玫瑰愛人 wma
2 高一首 我不願錯過 ***
3 黃凱芹 傷感的戀人 ***
4 黃燦 黃玫瑰 lrc
5 黎姿 如此這般的愛情故事 ***
講解:預設情況下,用做分隔符的標點符號將被忽略。
「tokens=1,2-4」中的「2-4」表示第二至第四列。
三、小結
「for /f」
一句話總結:解析文字,讀取字串。
delims的語法:
for /f "delims=符號集" %%i in (command1) do command2
一句話總結:忽略分隔符,切分字串。
delims的意義包括兩個方面:
第一、指定原文中的標點符號作為分隔符。使得文字被劃分為許多小部分,方便使用批處理命令讀取和編輯。
第二、讀取第乙個分隔符之前的內容。忽略第乙個分隔符和分隔符後面的內容,如需讀取和編輯,需要使用tokens等命令。
注意分隔符和標點符號的聯絡和區別。
分隔符就是原文中的標點符號,可以是乙個標點符號也可以是多個。但原文中的標點符號不一定是分隔符。
分隔符需要定義,即用」delims=」來指定,等於號後面跟被用來做分隔符的標點符號,該標點符號來自原文。
當有多個標點符號被定義為分隔符時,標點符號之間沒有空格。當用空格做分隔符時,空格應該放在其它用作分隔符的標點符號之後。
即使不使用delims,預設情況下,批處理也將空格作為分隔符。如檔名「program files」中含有空格時,批處理一般只讀取空格前的「program」,剩下的「files」被忽略了。
例:**9:空格預設作為分隔符
@echo off
for /f "delims=" %%a in ("偉大的中國人民萬歲 萬歲 萬萬歲") do echo %%a
pause>nul
執行結果:
偉大的中國人民萬歲 萬歲 萬萬歲
講解:「delims=」代表取消預設以空格作為分隔符。
批處理預設空格是分隔符,分隔符會隱藏第乙個分隔符後面的所有內容。為了顯示完整的資訊,所以有必要取消該功能。
因此,當檔名或路徑中含有空格時,需要用雙引號括住。如果不使用雙引號,括號內的內容將被當做檔名,如果檔名不存在,將提示「系統找不到……」。
如果不使用「delims=」,即使使用雙引號,也只能顯示第乙個空格前面的字串,後面的字串將被預設忽略。
tokens的語法:
for /f "tokens=x,y,m-n" %%i in (command1) do command2
一句話總結:提取列。
tokens的意義就是,提取指定的列。
注意列與句的聯絡與區別。
文字內容由許多文字字串組成,它們被標點符號分隔,兩個標點符號之間的語句我們稱為「句子」。
當標點符號被「tokens=」指定為分隔符之後,文字將被分成多個部分。對應的每行的每個部分我們稱之為「列」。
一列可能是乙個句子,也可能包含多個句子,視delims定義的標點符號而定。
其它方面:關於「行」的提取,前面做過乙個很簡單的:
@echo off
findstr /n .* 12.txt>>122.txt
set /p m=請輸入要定位的行:
findstr /b "%m%" 122.txt
pause
更詳細的講解請閱讀《for入門與精通秘籍》。
FOR引數F的選項delims與tokens上
for引數f的選項delims與tokens 本篇為 for入門與精通秘籍 的補充內容。在for命令語句的引數f中,最難理解的就是delims和tokens兩個選項,本文簡單的做乙個比較和總結。for f 常用來解析文字,讀取字串。分工上,delims負責切分字串,而tokens負責提取字串。如果把...
F 入門學習(十三) 選項
選項表示有兩種取值的狀態 有值或者無值。有值用some 取值。我終於知道前面的學習some是什麼意思了 無值用關鍵字none表示。定義選項常量 let x1 int option some 2 let x2 int option none結果為 val x1 int option some 2 va...
Nginx引數選項
options 選項 c 為 nginx 指定乙個配置檔案,來代替預設的。t不執行,而僅僅測試配置檔案。nginx 將檢查配置檔案的語法的正確性,並嘗試開啟配置檔案中所引用到的檔案。v顯示 nginx 的版本。v顯示 nginx 的版本,編譯器版本和配置引數。template anchornginx...