希望有人可以提供帮助。 我有一个批处理作业(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。新手,例如批量编程,编码等,所以请用纯英文解释。非常感谢
答案 0 :(得分:0)
默认情况下,命令行窗口(以及扩展名-BAT文件)以OEM
代码页运行。确切的代码页由您的操作系统设置(Language for non-Unicode programs
或类似设置)定义。因此,您通常无法使用ASCII以外的任何内容或任何代码页。
要使用这些字符,您需要在实际具有这些字符的代码页中进行操作。 UTF-8
是完成此任务的最佳选择(可能是唯一适合您的情况的选择)。
首先,将脚本另存为UTF-8。在notepad
中,您可以从save as
菜单中选择代码页。
如果您的编辑器不允许您选择UTF-8 (no BOM)
,则将BAT文件的第一行留空,因为某些编辑器可能会在文件前添加名为BOM
的特殊标头,以帮助检测代码页。如果是这样,而您将第一行留为空白,则脚本启动后会出现Bad command or file name
错误,但这不会阻止脚本正常运行。
现在,您的脚本位于UTF-8
中,但是Windows命令处理器仍将执行该脚本,就像在ASCII
中一样,从而破坏了所有特殊字符。要指定我们的编码,我们需要添加以下命令,优先添加为脚本的第一行非空白行,包括注释(注释中可能包含非ASCII字符-结果无法预测)
CHCP 65001
CHCP
将当前代码页更改为65001
,这是UTF-8
的内部代码页编号。
之所以起作用,是因为UTF-8
中的拉丁字母和数字与ASCII
和OEM
代码页中的编码相同。因此,您的脚本开始以OEM
代码页执行,但是由于CHCP 65001
命令本身没有非ASCII字符,因此可以正确理解。以下所有命令将以UTF-8执行,并且可能包含非ASCII字符。
您现在可以将em-dash
插入文件名,并且保存后不会替换为?
。
很遗憾,默认的控制台窗口字体无法正确显示UTF-8,因此您将无法正确看到非ASCII字符。
要解决此问题,您应该右键单击命令行窗口标题栏,选择properties
,然后将字体更改为UNICODE one。 Consolas
,Lucida Console
和Courier New
应该可以工作。
答案 1 :(得分:0)
感谢所有答复。 我不得不对我的数据库进行设计更改,因此设法满足了现在的需要(phe:))
再次感谢