来自 VBscript 的带有空格的 Cmd 命令

Posted

技术标签:

【中文标题】来自 VBscript 的带有空格的 Cmd 命令【英文标题】:Cmd commands with spaces from VBscript 【发布时间】:2017-12-12 13:58:44 【问题描述】:

我正在尝试通过命令行使用 VBScript 执行 SAS 代码。但是,我在将命令从 VBScript 正确传递到命令行时遇到问题。我很确定这是正确使用引号和chr(34) 的问题,但我无法弄清楚。

所以我想在命令行中运行以下命令:

"C:\Program Files\SAS 9.4\sas.exe" -SYSIN "C:\Program Files\test.sas"

我尝试过类似的东西

Set oShell = WScript.CreateObject ("WScript.Shell")
oShell.run "cmd.exe /K copy ""C:\Program Files\SAS 9.4\sas.exe"" -SYSIN ""C:\Program Files\test.sas"" ", 1, True
Set oShell = Nothing

但是我在命令行中得到一个无效的语法错误。有什么好主意吗?

【问题讨论】:

【参考方案1】:

CMD /K 需要一个参数。如果参数包含空格,则必须引用参数。所以完整的命令应该是这样的:

oShell.run "cmd.exe /K "" ""C:\Program Files\SAS 9.4\sas.exe"" -SYSIN ""C:\Program Files\test.sas"" "" ", 1, True

通常,人们不得不担心嵌套的引用/转义,但是 /C 和 /K 开关在引号的工作方式上是特殊的(CMD /? 解释了细节)。如果它看起来像一个单引号参数,则CMD 会自动忽略其中的任何引号。

【讨论】:

哦,是的,我在尝试 google 时感到困惑。所以我要执行的命令只是oShell.run "cmd.exe /K "" ^""C:\Program Files\SAS 9.4\sas.exe^"" -SYSIN ^""C:\Program Files\test.sas^"" "" ", 1, True 因为这应该在命令行中运行 test.sas 文件。但是,上述方法不起作用。我收到一个错误 ` '"C:\Program' `,我认为这表明引用不起作用:-/ 啊,对不起,我自己弄错了。 CMD /K 对引号有特殊的行为,这在 CMD 的其他任何地方都看不到,我忘记了。我已经更正了原来的答案。 像魅力一样工作。非常感谢 - 现在我的工作会简单得多;-)

以上是关于来自 VBscript 的带有空格的 Cmd 命令的主要内容,如果未能解决你的问题,请参考以下文章

cmd - 使用curl命令的注意点

使用 vbscript 命令提示符中的多个命令

如何在带有命令行参数的 vbscript 中调用函数?

在 Windows .cmd 文件或批处理文件的路径中设置带有空格的路径变量

VBScript 命令窗口 - 传递命令语法

cmd start命令 路径含空格