for命令詳解(下)

2021-08-26 11:45:51 字數 4156 閱讀 7866

五,for /f

用法for /f ["options"] %variable in (file-set) do command

for /f ["options"] %variable in ("string") do command

for /f ["options"] %variable in ('command') do command

或者,如果有

usebackq選項:

for /f ["options"] %variable in (file-set) do command

for /f ["options"] %variable in (『string』) do command

//實驗沒完全成功

for /f ["options"] %variable in (『command』) do command

//實驗失敗

filenameset

為乙個或多個檔名。繼續到

filenameset

中的下乙個檔案之前,每份檔案都已被開啟、讀取並經過處理。

處理包括讀取檔案,將其

分成一行行的文字

,然後將每行

解析成零或更多的符號。然後用已找到的符號字串變數值

呼叫for

迴圈。以預設方式,

/f通過每個檔案的每一行中分開

的第乙個

空白符號。跳過空白行

。您可通過指定可選

"options"

引數替代預設解析操作

。這個帶引號的字串包括乙個或多個

指定不同解析選項的關鍵字。這些關鍵字為

:eol=c-指

讀取檔案時

,忽略以

c打頭的那些行

skip=n-指

讀取檔案時,忽略開始時的n行。

delims=***

-指分隔符集。這個替換了空格和跳格鍵的預設分隔符集。

可以一次性指定多個分隔符號

,比如:

for /f "delims=.

," %%i in (test.txt) do echo %%i

tokens=x,y,m-n-

指每行的哪一項被傳遞到

for的迭代變數

。如果要提取的內容是連續的多「節

」的話,那麼,連續的數字可以只寫最小值和最大值,中間用短橫連線起來即可,比如

tokens=1,2,3,4,5

可以簡寫為

tokens=1-5

。還可以把這個表示式寫得更複雜一點:

tokens=1,2-5

,tokens=1-3,4,5

,tokens=1-4,5……

tokens=

後面所接的

星號具備這樣的功能:

字串從左往右被切分成緊跟在

*之前的數值所表示的節數之後,字串的其餘部分保持不變,整體被

*所表示的乙個變數接收

。比如:

tokens=1,*

中,星號前面緊跟的是數字

1;第一節字串被切分完之後,其餘部分字串不做任何切分,整體作為第二節字串,這樣,

[txt2]

就被切分成了兩節,分別被變數

%%i和變數

%%j接收。

usebackq -

使用雙引號擴起檔名稱時,需要開啟該引數。

如果在字串而不是檔案中查詢時,而這時字串本身有

雙引號時,這時括起字串的雙引號邊為單引號,則需要開啟

usebackq

1.在檔案上使用

for /f

的分析邏輯。

sample1:

for /f "eol=; tokens=2,3* delims=, " %%i in (myfile.txt) do command例項6

: for /f "usebackq delims= " %%i in (1.txt 2.txt) do @echo %%i例項7

: for /f "usebackq delims= " %%i in ("1.txt") do @echo %%i

會分析myfile.txt

中的每一行,忽略以分號打頭的那些行,將

每行中的第二個和第三個項傳遞給

for程式體;用逗號和/或

空格定界符號。請注意,這個

for程式體的語句引用%i來

取得第二個符號,引用

%j來取得第三個符號,引用

%k來取得第三個符號後的所有剩餘符號。對於帶有空格的檔案

名,您需要用雙引號將檔名括起來。為了用這種方式來使

用雙引號,您還需要使用

usebackq

選項,否則,雙引號會

被理解成是用作定義某個要分析的字串的。

%i專門在

for語句中得到說明,%j和

%k是通過

tokens=

選項專門得到說明的。您可以通過

tokens=

一行指定最多

26個符號,只要不試圖說明乙個高於字母

\'z\'

或\'z\'

的變數。請記住,

for變數是單一字母、分大小寫和全域性的;

同時不能有

52個以上都在使用中。

2.在字串上使用

for /f

的分析邏輯

;把括號中的

filenameset

用單引號括起來的字元

串替換就行了。這樣,該字元

串會被當作乙個檔案中的乙個單一輸入行。例項5

for /f "delims= " %%i in ("robin is a boy") do @echo name is %%i 注意

:字串本身有

雙引號時,這時括起字串的雙引號邊為單引號,則需要開啟引數

usebackq

3 在命令輸出上

使用for /f

的分析邏輯

。方法是,將

括號之間的

filenameset

變成乙個反括字串。該字串會

被當作命令列,傳遞到乙個子

cmd.exe

,其輸出會被抓進

記憶體,並被當作檔案分析。例項8

:for /f "delims= " %%i in ('set') do @echo %%i

它會列舉當前環境中的環境變數名稱。

另外,for

變數參照的替換已被增強。您現在可以使用下列

選項語法

:~i -

刪除任何引號

("),擴充

%i%~fi -將%i

擴充到乙個完全合格的路徑名

%~di -

僅將%i

擴充到乙個驅動器號

%~pi -

僅將%i

擴充到乙個路徑

%~ni -

僅將%i

擴充到乙個檔名

%~xi -

僅將%i

擴充到乙個副檔名

%~si -

擴充的路徑只含有短名

%~ai -將%i

擴充到檔案的檔案屬性

%~ti -將%i

擴充到檔案的日期/時間

%~zi -將%i

擴充到檔案的大小

%~$path:i -

查詢列在路徑環境變數的目錄,並將

%i擴充

到找到的第乙個完全合格的名稱。如果環境變數

未被定義,或者沒有找到檔案,此組合鍵會擴充

空字串

可以組合修飾符來得到多重結果

:%~dpi -

僅將%i

擴充到乙個驅動器號和路徑

%~nxi -

僅將%i

擴充到乙個檔名和副檔名

%~fsi -

僅將%i

擴充到乙個帶有短名的完整路徑名

%~dp$path:i -

查詢列在路徑環境變數的目錄,並將

%i擴充

到找到的第乙個驅動器號和路徑。

%~ftzai -將%i

擴充到類似輸出線路的

dir在以上例子中,%i和

path

可用其他有效數值代替。

%~語法

用乙個有效的

for變數名終止。選取類似

%i的大寫變數名

比較易讀,而且避免與不分大小寫的組合鍵混淆。

form元件詳解下

一 ext.form.field.hidden 隱藏字段,不展示,但是其值提交 ext.onready function 七 ext.form.field.file 上傳檔案,由於沒有後台,只能展示前台效果。submit提交後,可以在後台接受。ext.onready function ext.qui...

NPM使用詳解(下)

npm使用詳解 下 body body first child body last child p,blockquote,ul,ol,dl,table,pre h1,h2,h3,h4,h5,h6 h1 tt,h1 code,h2 tt,h2 code,h3 tt,h3 code,h4 tt,h4 c...

Java泛型詳解(下)

假設現在有乙個類employee和它的子類manager 現在問題來了 pair是pair的子類嗎?答案是 不是 例如,下面的 將不會編譯成功 manager tophonchos pairresult arrayalg.minmax tophonchos error minmax方法返回pair,...