所以我们刚刚发现了这个奇怪的怪癖。很容易避免,但好奇这里的专家是否知道发生了什么。
似乎如果您尝试在路径中包含空格和 @ 符号的批处理文件上使用右键单击“以管理员身份运行”,它将无法启动。它可以在正常上下文中运行,或者在您之前提升的命令提示符中运行良好,但是这组特定情况会导致它毫无意义地失败。
我在网上搜索了一下,唯一能找到的其他参考资料是一篇名为 CapnM 的用户的帖子,其中遇到了类似的问题并发现了同样的问题 -2015 年
如果目标路径同时包含符号 (@) 和空格,则文件资源管理器中的右键单击以管理员身份运行功能将失败。
例如这些路径有效:
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 年多来一直未修复的错误?
答案1
这里出现问题的 Windows 代码可能源自 DOS 的早期版本。它在处理特殊字符时确实很乱。
如果您想要另一个示例,请创建一个名为的文件D:\foo\file(.bat
并尝试使用 CMD 运行它,不需要管理员权限。以下是发生的情况:
在上面的例子中,在 CMD 命令中,括号分隔了命令,因此就好像您正在C:\foo\file
以(.bat
第一个参数运行该程序一样。
从这里可以看出,古老的 CMD 代码是在文件名更简单且允许使用非字母数字字符时编写的。
您在“以管理员身份运行”时遇到的问题可能与相同的古老代码有关。 用于的命令runas
在注册表中的键中定义
HKEY_CLASSES_ROOT\batfile\shell\runas\command
,并包含:
%SystemRoot%\System32\cmd.exe /C "%1" %*
发出“以管理员身份运行”命令后,CMD 就会运行该命令,我们知道它不能很好地处理特殊字符。微软从未发布过相关代码,因此我们无法评论其编写得有多糟糕。