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

我有一个批处理脚本:

test.bat的

echo first arg is %1 pause 

我想从一个带有pipe理权限的vbscript调用,如下所示:

test.vbs

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

这工作正常,但我无法传递包含空格作为单个参数的path参数。 基本上,我需要将参数放在空格中,但无论我尝试什么,都不起作用。 它看起来像调用批处理,但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 

但没有运气。 任何build议我做错了什么?

得到这个工作的方法是:

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

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

我仍然不确定为什么这只适用于将bat文件作为参数传递给“cmd”,而不是直接执行。

所有的信用都归功于Alex K,所以如果这对你有帮助的话,可以赞扬他的评论。

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