cmd 的 for 說明

一、/F 代表要 FOR 迴圈會對傳入的字串進行解析(parsing)。

二、”……” 代表「選項設定」,代表 FOR 迴圈應該如何解析傳入的字串,有以下幾種選項:

    1. eol=c 用來決定斷行符號,預設為 \n,但可換成其他字元(其中 c 只能是一個字元)

    註: c 為一個字元

    2. skip=n 用來決定要先跳過幾層迴圈。(也就是跳過前面幾行的意思)

    註: n 為數字

    3.delims=xxx 用來決定欄位的分隔字元,預設為空白與TAB符號,並可自訂多個字元

    註: xxx 代表多個字元,如果要同時設定小數點 (.) 與逗號 (,) 就要輸入 delims=.,

    4. tokens=x,y,m-n 用來決定一次要取出幾個欄位,第一個欄位會存放在第一個自動變數,第二個欄位會存放在第二個自動變數裡,依此類推。如果你設定第一個變數為 %i 那麼如果設定為 tokens=1,2 就代表你會得到一個 %i 與一個 %j 變數值,分別代表比對到的第1與第2個欄位。這裡有個特殊的情況是使用星號 ( * ),如果你設定為 tokens=1* 就代表你會得到一個 %i 變數值,以及一個 %j 變數值,但是 %j 變數值就不會再進行解析,而是將剩餘的文字全部都塞進 %j 變數值裡!

    註: x, x, m, n 都為數字,只是 m-n 是一種特別的表示法,代表一個解析欄位的範圍。例如 tokens=2-4 就代表取得三個變數,取得第2、第3與第4個欄位的值並塞入 %i $j %k 變數裡

    5. usebackq 用來設定上圖編號4的語法,主要是用在執行的指令中需要包含雙引號(“)的情況下

    例如

    for /F "usebackq" %i IN (`dir /b "C:\Program Files"`) DO @echo %i

三、%i 代表第一個解析出來的字串的參數代號,第一個為 %i 第二個為 %j 並依照英文字母類推。

四、小括弧裡面的就是從各管道取得的文字內容,可以讀取的內容包括三種:

    1.讀取文字檔的內容

    for /F %i IN (sample.txt) DO echo %i

    2.字串值

    for /F %i IN ("a b c") DO echo %i

    3.指令執行結果

    for /F %i IN ('dir /b') DO echo %i

上面的第4點當 usebackq 有被設定的情況下會有不同的行為出現:

    1.讀取文字檔的內容 (與上述一樣)

    for /F "usebackq" %i IN (sample.txt) DO echo %i
    for /F "usebackq" %i IN ("C:\My Folder\sample.txt") DO echo %i

    2.字串值

    for /F "usebackq" %i IN ('a b c') DO echo %i

    3.指令執行結果

    for /F "usebackq" %i IN (`dir /b`) DO echo %i
    for /F "usebackq" %i IN (`dir /b "C:\Program Files"`) DO @echo %i
——————————————————————————————————————————————————————————————————————————————————————–

只取得第一組mac address(第二組之後的mac跳過)

@echo off
for /f "tokens=1-6 delims=- " %%i in ('getmac ^| find "-"') do (
echo %%i:%%j:%%k:%%l:%%m:%%n
goto eof
)
:eof
pause