【发布时间】:2021-12-07 11:41:57
【问题描述】:
我在 Windows 注册表中将以下命令设置为自定义 URL 协议:
cmd /V:ON /C "SET r=%1 & SET s=!r:jhvnc:=! & start C:\Program Files\uvnc bvba\UltraVNC\vncviewer.exe !s:_= !"
这不起作用,因为 exe 文件的路径有空格。
通常,我会使用引号:
cmd /V:ON /C "SET r=%1 & SET s=!r:jhvnc:=! & start "C:\Program Files\uvnc bvba\UltraVNC\vncviewer.exe" !s:_= !"
但该命令已经在引号中。我尝试用双引号转义引号,但这不起作用。
我怎样才能做到这一点?
【问题讨论】:
-
我建议打开command prompt,运行
start /?并阅读输出帮助。第一个"引用的参数字符串由命令START 解释为控制台窗口的可选标题。在您的情况下,启动了一个 Windows GUI 应用程序,因此 Windows 库函数 CreateProcess 根本没有打开控制台窗口,explorer.exe使用它来启动cmd.exe和cmd.exe用来启动vncviewer.exe。 -
一般的解决方案是使用 after command
startfirst""在启动 Windows GUI 应用程序时指定一个空的窗口标题,以将"C:\Program Files\uvnc bvba\UltraVNC\vncviewer.exe"解释为带有包含在 @ 中的完整限定文件名的可执行文件987654334@ 通过命令 START。我建议运行下一个cmd /?并非常仔细地阅读输出帮助。最好引用cmd及其完整的限定文件名,另外使用选项/D和/E:ON并明确使用选项/S。 -
所以在注册表中应该定义字符串值:
C:\Windows\System32\cmd.exe /D /E:ON /V:ON /S /C "set "r=%~1" & set "s=!r:jhvnc:=!" & start "" "C:\Program Files\uvnc bvba\UltraVNC\vncviewer.exe" "!s:_= !"" -
/C 后面的命令不需要引号
-
Mofi 的建议中唯一有问题的部分是
%~1,它似乎没有被引用,当它包含特殊字符时可能会导致错误;唯一可靠的方法很可能是这样的:%ComSpec% /D /E:ON /V:ON /S /C ^"set "r=%~1" ^& set "s=!r:jhvnc:=!" ^& start "" "C:\Program Files\uvnc bvba\UltraVNC\vncviewer.exe" "!s:_= !"^"(最外面的引号被转义,因此让%~1出现引用)
标签: windows cmd command-line