FOR引數F的選項delims與tokens下

2021-08-23 13:39:01 字數 2788 閱讀 3289

二、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...