在 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="
哈!等號後面沒有東西了!它的意思就是不使用分隔任何分隔符號來拆解字串,所以我們就能取得整行字串囉!
沒有留言:
張貼留言