如何在Windows批处理文件中指定名称或路径中带有特殊字符(如ä、ö、ü)的本地文件?

4
在我的Windows机器上,我有一个小脚本(.bat)来启动我日常工作中使用的一些程序,例如Word、Outlook、某个Excel文件等。
一个未解决的问题是,我无法指定存储在本地文件夹中的某个特定的Excel文件,因为该文件夹的名称包含一个特殊字符(德语u-umlaut,即ü)。类似于:
C:\Büroeinrichtung\MyExcelFile.xlsx

在我的脚本中,我试图通过以下方式调用它:

Start "" "C:\Büroeinrichtung\MyExcelFile.xlsx"

但是在运行脚本时,我收到一个警报,指出不接受ü(其中ü在屏幕上被一些更花哨的符号替换)。
我可以通过将ü替换为ue或其他内容来更改文件夹名称以避免该问题,但我更希望有一种解决方案,允许保留现有的文件夹名称不变。
在其他问题中没有找到解决方法。
是否有解决方案?
PS:我使用Notepad++。
后续问题:仍然存在一个问题困扰着我(尽管最初的问题已经解决)。它涉及通过chcp命令从脚本内部编程更改代码页的方法。请参阅此处的问题

2
看一下CMD无法读取丹麦字符的问题。这是相同的文本编码问题。你在Notepad++中使用Windows-1252编写了批处理文件,但在控制台中,默认使用带有德语设置的OEM 850代码页。在OEM 850中,umlauts与Windows-1252中具有不同的代码值。 - Mofi
2个回答

3

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

  • 使用另一个编辑器来更改字符集。
  • 使用命令提示符并将Umlaut复制到您的编辑器中。
  • 使用CMD,进入您的目录并使用 dir / x 获取Büroeinrichtung的短名称,并在DOS脚本中使用它。

1
如果cmd附加到控制台,则批处理文件将使用控制台的代码页逐行解码。如果您保存为ANSI,则必须通过chcp.com [codepage number]临时更改控制台以使用ANSI代码页来处理相关行。控制台的默认值是OEM代码页。 - Eryk Sun
1
@ChristianGeiselmann 要将文本从控制台窗口复制到剪贴板,请右键单击控制台窗口以打开其上下文菜单,然后单击第一个菜单项“标记”。现在,您可以使用鼠标指针或Shift +箭头键进行矩形选择。一旦选择完成,请按RETURN或ENTER键将所选文本复制到剪贴板中。 - Mofi
1
将控制台中的umlaut字符通过剪贴板复制到GUI文本编辑器不起作用,因为OEM 850编码的字符在从剪贴板粘贴到Windows-1252时会自动转换。解决方案是将__DIR__的输出重定向到一个以OEM 850编码的文本文件中,并在GUI文本编辑器中打开此文件以复制OEM 850编码的umlaut到批处理文件中。 - Mofi
1
@Mofi,即使是相对不错的编程编辑器也能让你设置文件编码。从控制台复制的内容是Unicode而不是OEM,并且它会被作为Unicode粘贴到编辑器中,当存储文件时可以将其编码为OEM或任何你想要的编码格式。 - Eryk Sun
1
@Mofi,你说“OEM 850编码字符在从剪贴板粘贴到Windows-1252时会自动转换”。这是两个说法——它是一个“OEM 850字符”,但实际上它从来不是(控制台屏幕缓冲区是Unicode),并且它被复制为Unicode并粘贴为Unicode,假设我们没有使用一些只支持ANSI文本的来自黑暗时代的Windows 9x编辑器。 - Eryk Sun
显示剩余8条评论

0
之前提出的解决方案在我的情况下不起作用(即使用匈牙利特殊字符),但它给了我一个想法:
我使用dir /x将其写入文件:
dir <path> /x >>dir.txt

使用这个,我找到了短文件夹名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接