我有一个批处理脚本:
echo first arg is %1 pause
我想从一个带有pipe理权限的vbscript调用,如下所示:
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文件路径中都有空格,将会失败。