如何在vbs中传递包含空格的参数

时间:2012-11-16 10:16:34

标签: windows batch-file vbscript dos

我有一个批处理脚本:

test.bat的

echo first arg is %1
pause

我想从具有管理员权限的vbscript中调用,如下所示:

test.vbs

Set UAC = CreateObject("Shell.Application")
UAC.ShellExecute "test.bat", "argument", "", "runas", 1

这可以正常但我无法传递包含空格作为单个参数的路径参数。基本上,我需要将参数括在空格中,但无论我尝试什么,它都不起作用。看起来它调用了批处理,但cmd窗口只是闪烁并消失,所以我不知道出了什么问题。 我试过了:

UAC.ShellExecute "test.bat", """has spaces""", "", "runas", 1

UAC.ShellExecute "test.bat", Chr(34) & "has spaces" & Chr(34), "", "runas", 1

UAC.ShellExecute "test.bat", '"has spaces"', , "runas", 1

UAC.ShellExecute "cmd", "/c test.bat " & chr(34) & "has spaces" & chr(34), "", "runas", 1

但没有运气。有什么建议我做错了吗?

1 个答案:

答案 0 :(得分:4)

实现这一目标的方法是:

UAC.ShellExecute "cmd", "/c """"c:\test.bat"" ""has spaces""""", "", "runas", 1

使用runas调用管理员用户权限时需要注意的重要一点是,工作目录将更改为c:\ windows \ system32。因此,您需要指定批处理文件的完整路径,以便找到它。

我仍然不确定为什么只有在将bat文件作为参数传递给“cmd”时才有效,而不是直接执行它。

归功于Alex K的所有功劳,如果这有助于您,请提出他的意见。

在这种情况下,您需要引用cmd的整个参数集,以及每个参数。你还需要加倍报价。它看起来有点疯狂,但这是最好的解决方案,否则如果你在任何参数和bat文件路径中都有空格,它将会失败。