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。但是您的 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 保存的文本编辑器)。

相关内容