Windows批处理文件中文件名中包含非ASCII字符的文件


0

在通常的(西方)Windows计算机上,我有一个文件

файл.txt

文件名中包含非ASCII字母。如何从.bat文件中执行以下操作?

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

等等。?

我尝试将上述命令放入文件中 mybat.bat (使用UTF-8或UTF-16编码),但即使我将其运行也不起作用 cmd /u /c mybat.bat

注意:问题不在于如何将这些字母放在批处理文件中,而是如何使批处理文件执行预期的操作(在我的示例中,列出文件然后重命名)。

注意: dir > log.txt 命令将文件файл.txt显示为???。txt。然而, dir 在屏幕上将此文件正确显示为файл.txt。


使用 chcp 65001 之前 ren 命令。
miroxlav

我是否正确理解这将改变整个机器的代码页?比方说,如果并行执行其他批处理文件,会影响它们吗?
Alexander Gelbukh

@AlexanderGelbukh chcp命令只会影响该命令提示符窗口,但这不是你的主要问题..
barlop

@miroxlav ren 不需要chcp 65001它没有它工作正常。我刚试过它。当事情真的很容易测试时,请在告诉人们做事之前先测试一下。如果你还没有测试过,那么请说明你没有测试它并且你不确定,否则你会给出错误的信息。
barlop

@barlop感谢上课。我在Windows 7西班牙语版本上测试过它。我用utf-8编码保存了批处理文件,因为OEM编码显然不允许保存这些字母。没有, ren 不起作用。可能您的计算机具有包含西里尔语的OEM编码,然后您可以进行测试 ren比方说,中国人。
Alexander Gelbukh

Answers:


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还指出了记事本使用带有BOM的utf-8保存的问题的一个很好的解决方法,而chcp 65001是没有BOM的UTF-8。如果你有一个用bom编码为utf-8的批处理文件,那就说明了dir,或echoпривет然后它将无法工作,即使cmd的编码为65001.因为cmd将BOM混合到第一行。因此,解决方法是将命令从第二行开始。 (或者可以使用文本编辑器保存为utf-8而不使用BOM)。


是, chcp 65001 做了诀窍: ren 工作。是的,它不会影响其他窗口。没有, ren 不行不通 chcp (如果您的OEM是西里尔文,请尝试中文等)。对于那些将使用此答案的人:您可以找到当前的代码页 chcp 没有参数(将其保存在变量中并在退出前恢复)。在utf-8中,批处理文件的开头需要一个空行,否则BOM会干扰文件中的第一个命令。
Alexander Gelbukh

@AlexanderGelbukh ren在没有chcp 65001的情况下为我工作 pastebin.com/raw/4Z218wST 关于BOM,最好不要在文件中有一个,但如果你有一个BOM,那么顶部是否有一个空白行不会有太大差别见 pastebin.com/raw/pPJhKY0r
barlop

@AlexanderGelbukh如果你想在没有BOM的情况下保存为UTF-8,那么你可以使用notepad ++或notepad2。也是chcp 65001,然后是echoאאא> a.a将在没有BOM的情况下在utf-8中写入这些字符。如果您下载VIM 7,它会附带一个xxd.exe命令。 xxd命令很棒。 pastebin.com/raw/VXCRmdhP (charmap显示UTF-16代码,UTF-8代码不同..)xxd显示十六进制。
barlop

(1)“没有作品 chcp “:是的,从命令行开始工作,但问题是关于批处理文件。将命令放在批处理文件中,它会起作用吗?(2)空行:我的评论是关于批处理文件的。 echo привет 作为批处理文件的第一行并运行它,它将无法正常工作。将它作为第二行放置,它会在第一行显示有关BOM的错误消息,但会正常执行第二行。 (3)删除BOM:正确,简单,取决于您的目标。我自己使用Far Manager删除BOM:在编辑器中切换到DOS代码页(F8)并删除这三个字母。
Alexander Gelbukh

“你的主要问题是字体”。不。正如我所说,字母在屏幕上显示正常,但放置为 ?,chr(63),在一个文件中。没有字体会显示 ? 不同:)
Alexander Gelbukh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.