cmd 中內部指令預設輸出是以 ANSI 編碼,正體中文的部份看似 big5 ,所以利用 ConvertZ 可以用類似:
ConverZ /i:big5 /o:utf8 ..........這樣的語法將 dir 輸出的清單中文轉為 UTF-8 編碼,但是非 big5 的部份就無法正常顯示,通通變成問號了。
查了一下,原來 「cmd」可以利用「/u」的參數讓內部指令的輸出改用 Unicode 的格式,如果再搭配參數「/c」和「&&」符號,就可以讓我要的檔案清單通通轉成 UTF-8。
看一下 Windows cmd 的部份說明:
C:\>cmd /?
啟動 Windows XP 命令直譯器新例項
CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
[[/S] [/C | /K] string]
/C 執行字串中所描述的命令然後結束命令視窗
/K 執行 字串中所描述的命令然後保留命令視窗
/S 修改字串在 /C 或 /K (參看下方)
/Q 關閉 echo
/D 從登錄中停用 AutoRun 命令(參看下方)
/A 將內部命令輸出結果以 ANSI 格式導向 pipe 或檔案
/U 將內部命令輸出結果以 Unicode 格式導向 pipe 或檔案
/T:fg 設定幕前/幕後色彩 (參看 COLOR /?)
/E:ON 啟用命令延伸 (參看下方)
/E:OFF 停用命令延伸 (參看下方)
/F:ON 啟用檔案及目錄名稱完整字元(參看下方)
/F:OFF 停用檔案及目錄名稱完整字元(參看下方)
/V:ON 啟用延遲環境變數延伸,用 c 作為分隔字元。例如,
/V:ON 可以讓 !var! 在執行時展開變數 var。文法
var 則會在輸入時展開變數,這在 FOR 迴圈之中是
完全不同的事。
/V:OFF 停用延遲環境變數展開
例如:
cmd /u /c dir /b mp3 > mp3_list.txt && ConvertZ.exe /i:ULE /o:utf8 mp3_list.txt mp3_list.txt
上面這一行指令做了以下的事情:
- cmd /u /c :告訴 cmd 以 Unicode 格式輸出,並執行後面的兩道指令(粗體字的部份)。
- 以 dir 將 mp3 目錄中的檔名輸出到 mp3_list.txt 中儲存 (紅色的指令)。
- 以 ConvertZ 將 mp3_list.txt 中的字,由 Unicode (ULE) 轉成 UTF-8 的編碼 (藍色的指令)。
chcp 65001
回覆刪除dir /b mp3 > mp3_list.txt
高手:
刪除謝謝您, 多學會了一招 ^_^
我原本內接硬碟也正常,不知道弄到甚麼,執行CMD /U /C DIR /B 會有亂碼的問題,但這個BAT拿到外接式硬碟去執行卻沒編碼問題。難道是我的磁碟區編碼跑掉了嗎?
回覆刪除真的是好神奇,
回覆刪除CMD /U /C DIR /B 原本OK,但突然有亂碼問題
-----------------------------------------
CHCP 65001
DIR /B
這樣執行卻沒問題,難道這是CMD /U 失靈了嗎?