Windows批处理(robo)复制命令的Unicode参数

Windows批处理(robo)复制命令的Unicode参数,windows,unicode,batch-file,filenames,Windows,Unicode,Batch File,Filenames,我需要在一个批处理文件中复制多个文件。这些文件具有映射到不同代码页的Unicode名称 示例: set ArabicFile=ڊڌڵڲڛشس set CyrillicFile=щЖЛдЉи set GermanFile=Bücher copy %ArabicFile% SomePlaceElse copy %CyrillicFile% SomePlaceElse copy %GermanFile% SomePlaceElse 问题:批处理文件不能是Unicode 问题:如何将Unicode文

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

示例:

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

copy %ArabicFile% SomePlaceElse
copy %CyrillicFile% SomePlaceElse
copy %GermanFile% SomePlaceElse
问题:批处理文件不能是Unicode

问题:如何将Unicode文件名写入批处理文件,以便copy命令识别它们

注意事项:

我不在乎文件名如何显示。
实际上,批处理文件不仅仅是复制这些文件,我只是简化了描述以使问题更清楚

正确的批处理文件:

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

copy %ArabicFile% SomePlaceElse
copy %CyrillicFile% SomePlaceElse
copy %GermanFile% SomePlaceElse
根据Arnout的回答,我修改了批处理文件,如下所示。它现在可以正常工作,无需更改字体(正如Arnout评论的那样,这会很混乱)


我不确定,但我认为短(8.3)文件名将是ASCII,所以您可以这样引用它?如果需要,可以使用
dir/X

查找短文件名

  • 我添加
    CHCP 65001
    作为批处理文件的第一行
  • 将文件保存为不带BOM的UTF-8,然后
  • 将我的控制台字体设置为“光栅字体”以外的其他字体(在我的Win7框中,我可以选择ConsoleAS或Lucida console)
它起作用了。简单,不是吗?:-)


(如果您没有将非ASCII输出写入控制台,则实际上不需要更改字体。)

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

示例:
当DOS窗口打开并出现提示时:

D:\>md "Russia - Шпионка"
此命令类似于,名称显示正确。

但是如果我尝试使用记事本并保存在ANSII中,我就做不到。
所以,如果我再次使用记事本,并保存在UTF-8中,它将工作,但垃圾字符

chcp 65001
set fn14="Russia - Шпионка"
md %fn14%
运行this.bat(记事本保存UTF-8),指定垃圾字符

chcp 65001
set fn14="Russia - Шпионка"
md %fn14%
记事本的问题在于它使用UTF-8BOM

要使用UTF-8而不使用BOM保存.bat,我们必须使用类似记事本++的编辑器

RunThis.bat(记事本++保存UTF-8–无BOM


这一次,当我们直接从
explorer.exe

运行“
RunThis.bat
”时,它可以完美地工作。如果您打算使用可能包含Unicode的命令输出,则可能需要更改字体;)嗯,是的,这就是我所说的“如果您没有将非ASCII输出写入控制台”…酷,这很有效;-)仅此而已:如何在批处理文件中设置字体?批处理文件将在多台计算机上运行,在运行脚本之前,我无法重新配置它们。而且需要更改字体-如果我不更改字体,设置命令将失败。添加
回显是否会起作用,或者您是否依赖于能够在控制台窗口中看到(部分)输出?您可能可以通过在HKCU\Console下导入带有某些设置的.REG来指定字体,但这很难看,可能不是很健壮。(当然,您必须从另一个.CMD脚本执行此操作。)在我的Win7 64位机器上,
CHCP
区分大小写,我必须用小写字母编写命令。否则命令就不被识别。好主意!但是,在我的情况下,它无法使用您的解决方案,因为批处理文件需要在多个系统上运行,并且短名称在计算机之间可能不同(例如,当创建文件的顺序不相同时)。短文件名生成可以禁用,因此在任何情况下都不应依赖它们。