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

can I run vbscript commands directly from the command line (i.e. without a vbs file)?

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

我可以用vbscript达到同样的效果吗? 我见过需要你使用批处理脚本的解决方案, 但是,如果我在零写入权限的系统上怎么办?

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

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

但它仍然没有在控制台中打印结果。

不,Windows(wscript.execscript.exe)附带的解释器不支持它。如果您无法在任何地方创建文件,那您就不走运了。您需要某种包装脚本来将参数 运行sform 为 VBScript 解释器可以执行的内容。

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

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

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

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

它会有效地执行语句 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:\> <b>vbsrunner.cmd "WScript.Echo "foo" : WScript.Echo "bar""</b>
富
酒吧

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

您可以使用一种技巧,那就是mshta.exe。 您可以执行这样的代码:

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

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

也许您还可以从 this thread 中找到更多灵感(那里也发布了 mshta 解决方案)。尽管主要与批处理相关,但它是我的一个很好的纲要,其中包含几种非常疯狂的方法来欺骗 windows 执行 vbs 代码。