在文件路径批处理作业查询中添加破折号

时间:2018-11-20 11:40:23

标签: batch-file batch-processing

希望有人可以提供帮助。 我有一个批处理作业(Windows env),可以简单地将文件复制到另一个文件夹。

copy "\\ACP-MS-NAS21\Global\MEC Daily Productivity\Business Analysts\Master_List\HCP_Master_List.xlsx" ^
     "\\ACP-MS-NAS21\Global\CSD [?] DWP Medical Services\CSL_CSD_DB\Master_List"

但是出现以下错误:

  

文件名,目录名称或卷标语法不正确。

我可以看到文件路径中有一个破折号,我认为是引起问题的原因。 有什么方法可以在文件路径中使用通配符,还是可以通过其他任何方式识别作业?

先谢谢了。 PS。新手,例如批量编程,编码等,所以请用纯英文解释。非常感谢

2 个答案:

答案 0 :(得分:0)

默认情况下,命令行窗口(以及扩展名-BAT文件)以OEM代码页运行。确切的代码页由您的操作系统设置(Language for non-Unicode programs或类似设置)定义。因此,您通常无法使用ASCII以外的任何内容或任何代码页。

将脚本另存为UTF-8

要使用这些字符,您需要在实际具有这些字符的代码页中进行操作。 UTF-8是完成此任务的最佳选择(可能是唯一适合您的情况的选择)。

首先,将脚本另存为UTF-8。在notepad中,您可以从save as菜单中选择代码页。

如果您的编辑器不允许您选择UTF-8 (no BOM),则将BAT文件的第一行留空,因为某些编辑器可能会在文件前添加名为BOM的特殊标头,以帮助检测代码页。如果是这样,而您将第一行留为空白,则脚本启动后会出现Bad command or file name错误,但这不会阻止脚本正常运行。

选择UTF-8代码页

现在,您的脚本位于UTF-8中,但是Windows命令处理器仍将执行该脚本,就像在ASCII中一样,从而破坏了所有特殊字符。要指定我们的编码,我们需要添加以下命令,优先添加为脚本的第一行非空白行,包括注释(注释中可能包含非ASCII字符-结果无法预测)

CHCP 65001

CHCP将当前代码页更改为65001,这是UTF-8的内部代码页编号。

之所以起作用,是因为UTF-8中的拉丁字母和数字与ASCIIOEM代码页中的编码相同。因此,您的脚本开始以OEM代码页执行,但是由于CHCP 65001命令本身没有非ASCII字符,因此可以正确理解。以下所有命令将以UTF-8执行,并且可能包含非ASCII字符。

您现在可以将em-dash插入文件名,并且保存后不会替换为?

设置UTF-8字体

很遗憾,默认的控制台窗口字体无法正确显示UTF-8,因此您将无法正确看到非ASCII字符。 要解决此问题,您应该右键单击命令行窗口标题栏,选择properties,然后将字体更改为UNICODE one。 ConsolasLucida ConsoleCourier New应该可以工作。

答案 1 :(得分:0)

感谢所有答复。 我不得不对我的数据库进行设计更改,因此设法满足了现在的需要(phe:))

再次感谢