【问题标题】:Is it or is it not possible to "pass a quoted string as an argument to a command that needs to be quoted itself"?是否可以“将带引号的字符串作为参数传递给需要自己引用的命令”?
【发布时间】:2012-06-29 16:29:13
【问题描述】:

我知道,我知道。那就是疯狂所在。

标题指的是这个great answer。我只想一劳永逸地解决是否真的可以做这样的事情:

cmd /C start c:\program files            (says "Windows cannot find c:\program)
cmd /C "start c:\program files"          (ditto)
cmd /C start "c:\program files"          (opens another command window)
cmd /C start \"c:\program files\"        (says "Windows cannot find \"c:\program files\")
cmd /C "start \"c:\program files\""      (ditto)
cmd /C "start ^"c:\program files^""      (opens another command window)
rem Ad nauseam.

我要做的就是启动一个名称中可能包含空格的文件夹或 url。这是“高级”吗?

我见过this question,但是\"在上面不起作用。

我从 VFP 中的 WScript.Shell 对象调用它,因此我必须将整个命令作为单个字符串传递。但我想解决更一般的问题以供参考。

【问题讨论】:

  • 我以前打过这场仗,并决定将这些东西放入(可能是临时的)文件并将其作为输入通过管道输入总是更容易且不易出错,即使它涉及 scp /rsync-ing 这些文件到其他地方。
  • @JasonD,谢谢,我已经考虑过了(或环境变量)。很高兴知道这对其他人来说并不太疯狂,因为我最终可能会走那条路。

标签: escaping cmd


【解决方案1】:

您的问题不在于 cmd 以及它如何处理引号字符。它与开始以及它如何处理引号字符有关。如果要启动的第一个参数是带引号的字符串,则它是命令窗口的标题,而不是要执行的命令。

用法如下所示

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
  [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
  [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
  [command/program] [parameters]

"title"     Title to display in window title bar.

你这样做

cmd /c start "" "C:\Program Files"

【讨论】:

  • 是的!谢谢你。我已经“开始”怀疑 START 本身有问题,因为其他命令似乎可以接受这样的参数。
  • 这绝对令人困惑。顺便说一句, cmd /c 永远不会需要引号,因为它总是将命令行的其余部分视为命令。
  • CMD 可能不需要引号,但它们通常用于更容易在要执行的命令中包含重定向和管道。特殊字符可以转义,但我通常会看到引号。它肯定会让人感到困惑。
猜你喜欢
  • 2019-11-20
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
  • 2012-09-16
  • 2017-01-19
  • 2011-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多