在一台普通的(西方)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。但是您的 ren 命令在没有 65001 的情况下也可以正常工作。
注意-OP 指出了对此的更正..他的字体很好..但他需要 chcp 65001。
需要 chcp 65001 的另一种情况是批处理文件采用 utf8 编码。否则,即使执行仅包含 привет 等字母的批处理文件,这些字母也会被转换为问号。
OP 还指出了一个很好的解决方法,即 notepad 使用带 BOM 的 utf-8 保存,而 chcp 65001 是无 BOM 的 UTF-8。如果您有一个以带 bom 的 utf-8 编码的批处理文件,例如 dir 或 echo привет,那么它将不起作用,即使 cmd 的编码为 65001。因为 cmd 将 BOM 混入第一行。因此,一种解决方法是从第二行开始放置命令。(或者,可以使用以无 BOM 的 utf-8 保存的文本编辑器)。