【问题标题】:En Dash in file path batch job queryEn Dash in file path 批量作业查询
【发布时间】:2019-04-22 20:26:57
【问题描述】:

希望有人可以提供帮助。 我有一个批处理作业(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。批处理编程,编码等的新手,所以请用简单的英语解释。非常感谢

【问题讨论】:

  • 我没有看到 Emdash 你用 [?] 替换它了吗?您使用什么代码页 (chcp) 另一种方法可能是使用默认 UTF16 编码在 powershell 中执行该命令
  • 为什么不修复文件夹名称?
  • 嗨,是的,对不起,我粘贴了我试图使用的代码(而不是原始代码),我的错。考虑更改文件夹名称,但有很多用户可能会在其中设置快捷方式等内容,这可能会比修复脚本更令人头疼:)
  • Windows 会跟踪这样的内容。它将修复快捷方式。有一个正在运行的服务可以监控这一点。请参阅docs.microsoft.com/en-us/windows/desktop/fileio/…,此处详细介绍了 Windows 在使用快捷方式时将执行的操作。 docs.microsoft.com/en-us/windows/desktop/api/Shobjidl_core/…

标签: batch-file batch-processing


【解决方案1】:

默认情况下,命令行窗口(以及扩展名 - 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 中一样执行它,从而破坏所有特殊字符。要指定我们的编码,我们需要添加以下命令,优先作为脚本的第一个非空白行,包括 cmets(其中可能包含非 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 之一。 ConsolasLucida ConsoleCourier New 应该可以工作。

【讨论】:

  • 谢谢。我对所有这些脚本等都是新手(我学习了很多),所以会尝试其中的一些。我的脚本还有其他元素(将其他一些文件复制到各个位置)-假设实施上述内容不会影响这一点? (我的脚本中没有其他奇怪的字符)
  • 只要您遵循我的建议(即以 UTF-8 保存整个批处理文件),无论字符如何,它都不会影响其他任何内容。请尝试一下,看看它是否有效。
【解决方案2】:

感谢所有回复。 我不得不对我的数据库进行设计更改,因此现在设法解决了这样做的需要(唷:))

再次感谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多