2010-11-16 70 views
7

我需要在一个批处理文件中复制多个文件。这些文件具有映射到不同代码页的Unicode名称。Windows批处理:(robo)复制命令的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 

回答

12

如果

  • 我添加CHCP 65001为您的批处理文件的第一行,
  • 将文件保存为UTF-8无BOM和
  • 设置我的控制台字体比“光栅别的东西字体“(在我的Win7框中,我可以选择Consolas或Lucida Console),

它的工作原理。简单,不是? :-)

(字体的变化其实是没有必要的,只要你不是在写非ASCII输出到控制台)。

+0

如果您打算使用可能包含Unicode的命令输出,则可能需要更改字体*) – Joey 2010-11-16 12:23:16

+0

嗯,是的,这就是我的意思,“假设您不是将非ASCII输出写入控制台”... – Arnout 2010-11-16 12:27:21

+0

很酷,这个工程;-)只有gotcha:我如何设置批处理文件中的字体?批处理文件将在多台计算机上运行,​​并且在运行脚本之前我无法重新配置它们。并且需要更改字体 - 如果我不更改字体,set命令会失败。 – 2010-11-16 14:05:29

1

我不能肯定,但我认为短(8.3)文件名会ASCII,所以你可以参考这样的说法?您可以使用dir /X找到短文件名。

+0

善于思考运行“RunThis.bat”直接!不过,在我的情况下,它不能使用您的解决方案,因为批处理文件需要在多个系统上运行,并且计算机之间的短名称可能不同(例如,创建文件的顺序不相同时)。 – 2010-11-16 13:19:05

+0

短文件名的生成可以被禁用,所以你不应该依赖它们。 – Philipp 2010-11-16 17:58:31

0

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

例:
当DOS窗口是打开提示:

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

这项工作在命令状而得名正确显示。

但是,如果我尝试使用记事本,并保存在ANSII,我不能。
因此,如果我再次使用记事本并保存在UTF-8中,它将工作,但与垃圾字符。

RunThis.bat(记事本保存UTF-8),给垃圾字符。

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

问题与记事本,它使用UTF-8 BOM。

要使用UTF-8 保存.bat没有 BOM,我们必须使用像Notepad ++这样的编辑器。

RunThis.bat(记事本++保存UTF-8 - 没有BOM

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

这一次它的工作完美,当我们从explorer.exe