我可以直接从命令行运行vbscript命令(即没有vbs文件)?

时间:2015-01-25 09:31:17

标签: vbscript wsh

在Python中,您没有义务使用文件,您可以指定-c "..."并通过命令行上的字符串将Python命令提供给Python解释器。

我可以用vbscript获得相同的结果吗? 我见过需要你使用批处理脚本的解决方案, 但是,如果我在一个零写权限的系统上呢?

根据@Syberdoor的回答,我可以运行:

mshta vbscript:Execute("dim result:result=InputBox(""message"",""title"",""input"")(window.close):echo result")

但它仍然无法在控制台中打印结果。

2 个答案:

答案 0 :(得分:5)

你可以使用一个技巧,那就是mshta.exe。 您可以执行以下代码:

mshta vbscript:Execute("<your code here, delimit lines with : (colon)>:close")

这当然是一个非常疯狂的黑客,在一个你甚至不允许创建文件的系统上我不确定是否允许使用mshta.exe。

也许你也可以从this thread找到额外的灵感(mshta解决方案也在那里发布)。虽然主要是批处理相关的,但它几乎是一个非常疯狂的方法,可以欺骗窗口执行vbs代码。

答案 1 :(得分:1)

不,Windows附带的解释程序(wscript.execscript.exe)不支持。如果你不能在任何地方创建一个文件,那你运气不好。您需要某种包装脚本来将参数转换为VBScript解释器可以执行的内容。

天真的方法是创建一个带有ExecuteGlobal语句的VBScript,如下所示:

With WScript.Arguments.Named
  If .Exists("c") Then ExecuteGlobal .Item("c")
End With

但是,这将无法正常工作,因为参数中不会保留双引号。如果你像这样运行上面的脚本:

C:\> vbsrunner.vbs /c:"WScript.Echo "foo""

它会有效地执行语句WScript.Echo foo而不是WScript.Echo "foo",而我无法找到一种方法来逃避嵌套的双引号,以便它们保存在参数中。

什么是有效的批处理脚本,它将参数写入临时文件,然后使用VBScript解释器执行该文件:

@echo off

setlocal

set "tempfile=%TEMP%\%RANDOM%.vbs"

>"%tempfile%" echo.%~1
cscript.exe //NoLogo "%tempfile%"
del /q "%tempfile%"

这样你就可以在命令行上运行VBScript语句,如下所示:

C:\> vbsrunner.cmd "WScript.Echo "foo" : WScript.Echo "bar""
foo
bar

如果你想复制Python的交互模式,可以使用我的vbsh,但这仍然需要能够在某处创建文件。