所以我们刚刚发现了这个奇怪的怪癖。很容易避免但很好奇这里的任何专家是否知道发生了什么。
似乎如果您尝试在路径中包含空格和@符号的批处理文件上使用右键单击“以管理员身份运行”,它将无法启动。它会在正常上下文中运行良好,或者在您之前提升的命令提示符下运行,但是这组特定的情况会导致它毫不客气地失败。
我在网上做了一些搜索,唯一能找到的其他参考资料是一篇名为 CapnM 的用户遇到类似问题并发现同样问题的帖子——早在 2015 年
如果目标路径同时包含 at 符号 (@) 和空格,则文件资源管理器中的右键单击“以管理员身份运行”功能将失败。
例如,这些路径有效:
D:\foo\bar\foobar\ D:\foo\bar\foo bar\ D:\@foo\bar\foobar\ D:\@foo\bar@\foobar\
但是这些会阻止目标(批处理文件)运行:
D:\@foo\bar\foo bar\ D:\foo\bar\@foo bar\
这只是一个 4 年以上未修复的直接错误吗?
此处出现故障的 Windows 代码可能可以追溯到 DOS 的早期。处理特殊字符真是一团糟。
如果您希望另一个示例,请创建一个名为的文件
D:\foo\file(.bat
并尝试使用 CMD 运行它,不需要管理员权限。这是发生的事情:在上面的示例中,在 CMD 命令中,括号分隔了命令,因此就好像您在运行程序时将
C:\foo\file
其(.bat
作为第一个参数。从这里您可以看到,古代 CMD 代码是在文件名更简单且允许使用非字母数字字符之前编写的。
您对“以管理员身份运行”的问题可能会遇到相同的古老代码。用于的命令
runas
在注册表中的 key 处定义HKEY_CLASSES_ROOT\batfile\shell\runas\command
,并且包含:发出“以管理员身份运行”使用 then CMD 运行命令,我们知道它不能很好地处理特殊字符。所涉及的代码从未由微软发布,因此我们无法评论它的编写有多糟糕。