在Python中,您没有义务使用文件,您可以指定-c "..."
并通过命令行上的字符串将Python命令提供给Python解释器。
我可以用vbscript获得相同的结果吗? 我见过需要你使用批处理脚本的解决方案, 但是,如果我在一个零写权限的系统上呢?
根据@Syberdoor的回答,我可以运行:
mshta vbscript:Execute("dim result:result=InputBox(""message"",""title"",""input"")(window.close):echo result")
但它仍然无法在控制台中打印结果。
答案 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.exe
和cscript.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
,但这仍然需要能够在某处创建文件。