20250421

bat-for /f用法

📘 BAT 中的 for /F 使用方法

在 Windows 批次檔(.bat)中,for /F 是一個非常實用的指令,用來逐行處理文字檔或讀取命令的輸出結果。本篇整理了 for /F 的基本語法、參數用法,以及實用範例,幫助你掌握它的應用。


🔹 什麼是 for /F?

  • for /F 是 for 指令的延伸,用來「逐行讀取文字檔內容」或「解析一條命令的輸出」。

  • 它和一般的 for 不一樣,不是用來跑數字或列出檔案,而是處理文字資料。


📌 基本語法:

for /F ["options"] %%A in (filename.txt) do (
    command...
)

或:

for /F ["options"] %%A in ('some command') do (
    command...
)

🔸 常用參數說明:

參數 說明
delims= 指定分隔符。若設為空,代表「不要分隔整行」
tokens=n 指定要取第幾個欄位的資料(token)
'command' 以反引號(或用 usebackq 時用雙引號)包住的指令,表示讀取其輸出內容

📘 範例一:逐行讀取文字檔

假設 list.txt 內容如下:

apple
banana
cherry

程式碼:

@echo off
for /F "delims=" %%A in (list.txt) do (
    echo %%A
)

輸出:

apple
banana
cherry

🔹 delims= 這裡的作用是:避免內容中有空白時被截斷,讓整行內容都能被讀取。


📘 範例二:處理指令的輸出

@echo off
for /F "tokens=2 delims=:" %%A in ('ipconfig ^| find "IPv4"') do (
    echo IP 是:%%A
)

說明:

  • 這段會從 ipconfig 的輸出中找出 IPv4 位址。

  • tokens=2 delims=: 是說「用冒號分隔,取第二欄」。


📘 範例三:使用 tokens 拆解欄位

假設有一個 CSV 檔 data.txt:

Tom,25,Taipei
Amy,30,Kaohsiung
John,28,Taichung

程式碼:

@echo off
for /F "tokens=1,3 delims=," %%A in (data.txt) do (
    echo 姓名: %%A, 城市: %%B
)

輸出:

姓名: Tom, 城市: Taipei
姓名: Amy, 城市: Kaohsiung
姓名: John, 城市: Taichung

✅ 是否一定要寫 delims=?

不是,但建議加上。

如果你確定你的文字檔內容沒有空白或特殊符號,可以省略 delims=,但一旦某一行出現空格,就可能會被分割,只抓到第一個詞。例如:

apple pie

沒加 delims= 時,只會抓到 apple。所以:

for /F "delims=" %%A in (list.txt) do (
    echo %%A
)

是比較安全、穩定的寫法。


🧠 小結

功能 用法範例
逐行讀取文字檔 for /F "delims=" %%A in (file.txt)
處理命令輸出結果 for /F "tokens=2 delims=:" %%A in ('command')
解析多欄資料(CSV) for /F "tokens=1,2 delims=," %%A in (file.csv)
避免被空白分割 使用 delims= 保留整行資料