【问题标题】:quotes inside quotes with windows' cmdwindows cmd 引号内的引号
【发布时间】: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.execmd.exe 用来启动 vncviewer.exe
  • 一般的解决方案是使用 after command start first "" 在启动 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


【解决方案1】:

最简单的解决方法是使用历史短文件夹名称

应该是 C:\PROGRA~1\UVNCBV~1\

使用 dir /x /a:d C:\PROGRA~1\U* 检查

cmd /V:ON /C "SET r=%1 & SET s=!r:jhvnc:=! & start C:\PROGRA~1\UVNCBV~1\UltraVNC\vncviewer.exe !s:_= !"

【讨论】:

  • 可以在操作系统或每个卷中关闭短名称生成。
猜你喜欢
  • 1970-01-01
  • 2013-09-24
  • 2014-01-22
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 2014-02-02
  • 2015-01-14
相关资源
最近更新 更多