Windows批处理:(Robo)Copy命令的Unicode参数

11

我需要在一个批处理文件中复制多个文件。这些文件具有Unicode名称,映射到不同的代码页。

示例:

set ArabicFile=ڊڌڵڲڛشس
set CyrillicFile=щЖЛдЉи
set GermanFile=Bücher

copy %ArabicFile% SomePlaceElse
copy %CyrillicFile% SomePlaceElse
copy %GermanFile% SomePlaceElse

问题:批处理文件无法使用Unicode。

问题:我怎样才能将Unicode文件名写入批处理文件,以便复制命令能识别它们?

备注:

我不关心文件名的显示方式。
实际上,批处理文件要做的远不止复制这些文件,我只是简化了描述以更清楚地表明问题。

正确的批处理文件:

根据Arnout的答案,我修改了我的批处理文件。现在它可以正常工作,而无需改变字体(这样会很混乱,如Arnout所评论的那样)。

@echo off

chcp 65001

set ArabicFolder=ڊڌڵڲڛشس
set CyrillicFolder=щЖЛдЉи
set GermanFolder=Bücher

robocopy /e d:\temp\test\%ArabicFolder% d:\temp\test2\%ArabicFolder% /log:copy.log
robocopy /e d:\temp\test\%CyrillicFolder% d:\temp\test2\%CyrillicFolder% /log+:copy.log
robocopy /e d:\temp\test\%GermanFolder% d:\temp\test2\%GermanFolder% /log+:copy.log
3个回答

18

如果:

  • 我在您的批处理文件中添加CHCP 65001作为第一行,
  • 将文件另存为UTF-8无BOM格式,且
  • 将我的控制台字体设置为非“Raster Fonts”(在我的Win7机器上我可以选择Consolas或Lucida Console),

那么它就能正常工作。简单明了,是吧? :-)

(实际上,字体更改并不是必要的,只要您不向控制台输出非ASCII字符即可。)


如果您打算使用可能包含Unicode的命令输出,则更改字体可能是必要的 ;) - Joey
嗯,是的,这就是我所指的“只要您没有向控制台输出非ASCII字符”…… - Arnout
很酷,这个可行;-)唯一的问题是:我如何在批处理文件中设置字体?批处理文件要在多台计算机上运行,我无法在运行脚本之前重新配置它们。而且需要更改字体-如果我不更改字体,则设置命令将失败。 - Helge Klein
加入 ECHO OFF 命令可以解决问题吗,还是您需要在控制台窗口中查看部分输出?您可能可以通过导入一些设置的 .REG 文件来指定字体,该文件位于 HKCU\Console 下,但这样做相当丑陋且可能不太健壮。(当然,您必须从另一个 .CMD 脚本执行此操作。) - Arnout
在我的Win7 64位机器上,CHCP是区分大小写的,我必须以小写形式编写命令。否则,该命令将无法识别。 - jahu
这对我没用,我需要列出文件服务器上所有单独的文件夹和子文件夹的列表(超过95000个),其中近9000个因为有重音符号而失败。有趣的是,我从PowerShell切换到Robocopy,因为我也遇到了长路径的问题。所以现在有点绝望了... - curropar

1

我不确定,但我认为短(8.3)文件名将是ASCII编码,因此您可以用这种方式引用它?您可以使用dir /X命令查找短文件名。


好的想法!不过在我的情况下不能使用你的解决方案,因为批处理文件需要在多个系统上运行,而短名称可能会因计算机而异(例如当创建文件的顺序不相同时)。 - Helge Klein
1
短文件名生成可以被禁用,因此您绝不能依赖它们。 - Philipp

0

我想创建一个批处理文件(例如RunThis.bat),它可以创建俄罗斯或其他名称的目录。

例如:
当DOS Windows打开提示符时:

D:\>md "Russia - Шпионка"

这个工作在命令行中可以正常显示名称。

但是如果我尝试使用记事本并保存为ANSII,就无法正常显示。
因此,如果我再次使用记事本并保存为UTF-8,它将能够正常工作,但会出现垃圾字符。

RunThis.bat(记事本保存UTF-8)会产生垃圾字符。

chcp 65001
set fn14="Russia - Шпионка"
md %fn14%

Notepad的问题在于它使用带BOM的UTF-8。

要保存不带BOM的UTF-8格式的.bat文件,我们必须使用像Notepad++这样的编辑器。

RunThis.bat(Notepad++保存UTF-8 - 无BOM)

chcp 65001
set fn14="Russia - Шпионка"
md %fn14%

这次当我们直接从“explorer.exe”运行“RunThis.bat”时,它完美地工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接