尽管 cmd.exe 可以使用 来处理 UNC 路径PUSHD \\UNC\Path
,但我尝试从 UNC 路径启动 cmd 或类似命令。原因如下:
我正在将“在此映射网络驱动器”添加到我的上下文菜单工具套件中,如“在此启动 Powershell”和“在此打开命令提示符”。它们将注册表项添加到 Windows 注册表中,效果很好。
作为示例,这些在这里打开命令提示符:
"cmd /s /k ""VER && TITLE Command Prompt: %1 && PUSHD ""%1"" "" "
(对于右键单击文件夹,适用于 UNC 路径)
"cmd /s /k ""VER && TITLE Command Prompt: %%%CD%%%"" "
(对于右键单击目录的背景,不适用于 UNC 路径)
该命令作为注册表项 DWORD 输入,右键单击文件夹时有效:
"net use * ""%1"" "
(对于右键单击文件夹,适用于 UNC 路径)
"net use * ""%%%CD%%%"" "
(对于右键单击目录的背景,不适用于 UNC 路径)
我怀疑%%%CD%%%
它正在被 cmd.exe 扩展,它不会在 UNC 路径中启动。
我的问题是;如何获取右键单击的“驱动器或目录的背景”的路径(针对 UNC 和 Windows 路径)在注册表项中展开,以便将其传递给命令?
这些将分别进入HKCR,Directory\Shell\xxx\command
和HKCR,Directory\Background\Shell\xxx\command
。
这是一个开源项目,可在 GitHub 上找到:https://github.com/Ehryk/ContextMenuTools
答案1
我不确定...但是你的意思是这样吗?(您需要使用 %V 而不是 %1)
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\Background\shell\cmd]
@="Open cmd here"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\Directory\Background\shell\cmd\command]
@="cmd /s /k \"VER && TITLE Command Prompt: \"%V\" && PUSHD \"%V\" \""
(顺便说一下,NoWorkingDirectory 的用途是,当使用 UNC 作为工作目录打开 cmd 时,您不会收到初始错误消息。这将启动没有当前目录的 cmd,之后您执行 pushd 来获取临时驱动器号)
编辑:由于您单击的是目录的空白处,因此 %1 参数未填写(就像您单击目录本身一样)。因此您需要使用 %V 或 %W。它们代表工作目录,即右键单击网络目录的空白处时的 UNC 路径。
看这里以获取这些变量的完整列表。