我可以直接从命令行 运行 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.exe
和 cscript.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 代码。
在 Python 中你没有义务使用文件,你可以指定 -c "..."
并通过字符串将 Python 命令提供给 Python 解释器命令行。
我可以用vbscript达到同样的效果吗? 我见过需要你使用批处理脚本的解决方案, 但是,如果我在零写入权限的系统上怎么办?
根据@Syberdoor 的回答,我可以运行这个:
mshta vbscript:Execute("dim result:result=InputBox(""message"",""title"",""input"")(window.close):echo result")
但它仍然没有在控制台中打印结果。
不,Windows(wscript.exe
和 cscript.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 代码。