Windows 批次檔中檔案名稱中包含非 ASCII 字元的文件

Windows 批次檔中檔案名稱中包含非 ASCII 字元的文件

在普通(西方)Windows 電腦上,我有一個文件

файл.txt

檔案名稱中包含非 ASCII 字母。如何從 .bat 檔案執行以下操作?

dir файл.txt
ren файл.txt file.txt

ETC。

我嘗試將上述命令放入文件中mybat.bat(使用 UTF-8 或 UTF-16 編碼),但即使我將其作為cmd /u /c mybat.bat.

注意:問題不是如何將這些字母放入批次檔中,而是如何使批次檔執行預期的操作(在我的範例中,列出檔案然後重命名它)。

注意:dir > log.txt指令將文件файл.txt 顯示為????.txt。但是,dir該文件在螢幕上正確顯示為 файл.txt。

答案1

你的主要問題是字體https://stackoverflow.com/questions/9321419/unicode-utf-8-text-file-gibberish-on-windows-console-trying-to-display-hebrew使用正確的字體就不會出現問號。因此,您應該將 Courier New 新增至命令提示字元。然後您將能夠鍵入或顯示/回顯此類字元。

如果您隨後發現某些指令有問題,請嘗試 chcp 65001(在回答您的問題時,請放心,chcp 65001 只會影響該 cmd 提示視窗)。您需要 chcp 65001 進行重定向才能處理 \u7F 之外的字符,例如dir >asdf使用這些字符寫入檔案的命令將需要 chcp 65001。

注意-OP指出了對此的更正..他的字體很好..但他需要chcp 65001。

另一種需要 chcp 65001 的情況是批次檔採用 utf8 格式。否則,即使執行僅包含 привет 等字母的批次文件,這些也會被轉換為問號。

OP也指出了一個很好的解決方法,解決記事本使用帶BOM的utf-8保存,而chcp 65001是不帶BOM的UTF-8的問題。如果你有一個帶有 bom 編碼為 utf-8 的批次文件,即僅表示 dir 或 echo привет 那麼它將無法工作,即使 cmd 的編碼為 65001。因此,解決方法是將命令從第二行開始。 (或可使用另存為 utf-8 且不含 BOM 的文字編輯器)。

相關內容