【问题标题】:How to specify a local file with special characters in its name or path like ä, ö, ü in a Windows batch file?如何在 Windows 批处理文件中指定名称或路径中带有特殊字符的本地文件,如 ä、ö、ü?
【发布时间】:2017-05-31 09:01:04
【问题描述】:

在我的 Windows 机器上,我有一个小脚本 (.bat) 来启动一些我用于日常工作的程序,例如 Word、Outlook、某个 Excel 文件等。

一个未解决的问题是我无法指定存储在本地文件夹中的某个 Excel 文件,因为该文件夹的名称中有一个特殊字符(德语 u-umlaut,即 ü)。比如:

C:\Büroeinrichtung\MyExcelFile.xlsx

在我的脚本中,我尝试通过

调用它
Start "" "C:\Büroeinrichtung\MyExcelFile.xlsx"

但在运行脚本时,我收到一条警告,指出 ü 不被接受(其中 ü 被屏幕上的一些更花哨的标志取代)。

我可以通过将 ü 替换为 ue 或其他任何方式来更改文件夹名称以规避问题,但我更希望有一个解决方案,允许保持现有文件夹名称不变。

在这里没有找到其他问题中解决的问题。

有解决办法吗?

PS:我使用记事本++。

后期补充:有一个后续问题一直困扰着我(虽然最初的问题已经解决了)。它是关于使用 chcp 命令从脚本内部以编程方式更改代码页的方法。 See the question here

【问题讨论】:

标签: batch-file codepages


【解决方案1】:

问题在于不同的字符集:ANSI 和 ASCII。存在不同的解决方案:

  • 使用可以更改字符集的其他编辑器。
  • 使用提示符并将元音变音复制到您的编辑器。
  • 使用 CMD,转到您的目录并使用 dir /x 从 Büroeinrichtung 获取短名称并在您的 DOS 脚本中使用它。

【讨论】:

  • 如果 cmd 附加到控制台,批处理文件将使用控制台的代码页逐行解码。如果您保存在 ANSI 中,则必须通过chcp.com [codepage number] 临时更改控制台以使用相关行周围的 ANSI 代码页。控制台的默认值是 OEM 代码页。
  • @ChristianGeiselmann 要将文本从控制台窗口复制到剪贴板,请右键单击控制台窗口以打开其上下文菜单,然后左键单击第一个菜单项 Mark。现在您可以使用鼠标指针或使用 Shift+箭头键进行矩形选择。选择完成后,按 RETURN 或 ENTER 键将所选文本复制到剪贴板。
  • 无法通过剪贴板将元音变音字符从控制台复制到 GUI 文本编辑器,因为 OEM 850 编码字符会在从剪贴板粘贴到 Windows-1252 时自动转换。解决方案是将 DIR 的输出重定向到 OEM 850 编码的文本文件中,然后在 GUI 文本编辑器中打开此文件,将 OEM 850 编码的变音符号复制到批处理文件中。
  • @Mofi,即使是一个半途而废的编程编辑器也可以让您设置文件编码。从控制台复制的是 Unicode,而不是 OEM,它以 Unicode 的形式粘贴到编辑器中,然后可以在保存文件时编码为 OEM 或您想要的任何内容。
  • @Mofi,您说“OEM 850 编码字符会在从剪贴板粘贴到 Windows-1252 时自动转换”。这是两个声明——它是一个“OEM 850 字符”,它在任何时候都不是(控制台屏幕缓冲区是 Unicode),并且它在编辑器中被转换为 ANSI 1252,这又不是发生的事情。假设我们没有使用黑暗时代的某些仅支持 ANSI 文本的 Windows 9x 编辑器,它被复制为 Unicode 并粘贴为 Unicode。
【解决方案2】:

之前的建议解决方案不适用于我的情况(即使用匈牙利特殊字符),但它给了我一个想法:

我使用dir /x 写入文件:

dir <path> /x >>dir.txt

使用我找到的短文件夹名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 2013-04-16
    • 2018-02-08
    • 2012-05-20
    • 1970-01-01
    • 2016-07-21
    相关资源
    最近更新 更多