【问题标题】:can I run vbscript commands directly from the command line (i.e. without a vbs file)?我可以直接从命令行运行 vbscript 命令(即没有 vbs 文件)吗?
【发布时间】:2015-01-25 09:31:16
【问题描述】:

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

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

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

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

但它仍然不会在控制台中打印结果。

【问题讨论】:

    标签: vbscript wsh


    【解决方案1】:

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

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

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

    也许您还可以从this thread 中找到更多灵感(mshta 解决方案也发布在那里)。虽然主要与批处理相关,但它是 imo 的几个非常疯狂的方法的一个很好的纲要,可以欺骗 Windows 执行 vbs 代码。

    【讨论】:

    • 感谢您的宝贵意见!我成功运行以下行:'mshta vbscript:InputBox("message","title","input")(window.close)'
    • 但我不知道如何在控制台打印结果。
    • @chafporte mshta.exe 不支持。对于控制台输出,您需要cscript.exe
    • 您必须使用消息框进行输出,或者您可以将所有输出收集到一个字符串中,然后执行“cmd /k echo ”,从而创建一个包含所有输出的新 cmd 窗口你的输出...
    【解决方案2】:

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

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

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

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

    C:\&gt; <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:\> vbsrunner.cmd "WScript.Echo "foo" : WScript.Echo "bar""
    foo
    bar

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

    【讨论】:

      猜你喜欢
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 2019-04-16
      • 2012-10-18
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      • 2016-11-03
      相关资源
      最近更新 更多