2022年5月31日 星期二

批次檔的 FOR /F 與帶有空格的檔名

2022年5月31日 星期二

 在 Windows 的批次檔中使用 FOR /F 可以讀取文字檔,然後一行行拿來處理。最近常拿它來結合 ffmpeg 處理英文的語音 mp3 檔案。不過今天遇到一個情形,「book」、「book bag」這兩行讀入後,被 FOR /F 同樣解讀為「book」了。這個狀況在別的單字也會出現,也就是,遇到空白就被截斷。

看一下 FOR 的語法說明中有這個:

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]

關於引號中的 options 有一個選項「delims」是和前述的問題相關的:

delims=xxx      - 指定分隔符號集。這會取代預設的空格與定位字元的分隔符號集。

當我們使用 FOR /F 讀入一個文字檔時,讀入一行以後,預設會以空格或定位字元來當分隔符號,將這一行拆成多個欄位。所以前面提到的「book bag」,就因為空格,被拆成兩個,只取了前面的「book」。

為了解決這個問題,當然就是自己設定「delims」的選項,不要讓它使用空格來當分隔的符號。

例如:

FOR /F  "delims=" %%w IN (list.txt) DO (
    ..........
)

上面的指令會一行行讀取 list.txt ,然後將該行,整行的資料指定給 %%w 這個變數。

最關鍵就在指令裡的這個:

"delims="

哈!等號後面沒有東西了!它的意思就是不使用分隔任何分隔符號來拆解字串,所以我們就能取得整行字串囉!


沒有留言:

張貼留言

 
雄::gsyan © 2009. Design by Pocket