我是否可以直接从命令行运行vbscript命令(即不使用vbs文件)?
在Python中,您不必使用文件,您可以指定我是否可以直接从命令行运行vbscript命令(即不使用vbs文件)?,vbscript,wsh,Vbscript,Wsh,在Python中,您不必使用文件,您可以指定-c“…”,并通过命令行上的字符串将Python命令提供给Python解释器 我可以用vbscript实现相同的结果吗? 我见过需要使用批处理脚本的解决方案, 但是如果我在一个没有写权限的系统上呢 根据@Syberdoor的答案,我可以运行以下命令: mshta vbscript:Execute("dim result:result=InputBox(""message"",""title"",""input"")(window.close):echo
-c“…”
,并通过命令行上的字符串将Python命令提供给Python解释器
我可以用vbscript实现相同的结果吗?
我见过需要使用批处理脚本的解决方案,
但是如果我在一个没有写权限的系统上呢
根据@Syberdoor的答案,我可以运行以下命令:
mshta vbscript:Execute("dim result:result=InputBox(""message"",""title"",""input"")(window.close):echo result")
但是它仍然不会在控制台中打印结果。不,Windows附带的解释器(
wscript.exe
和cscript.exe
)不支持这一点。如果你不能在任何地方创建一个文件,那你就倒霉了。您需要某种包装器脚本来将参数转换为VBScript解释器可以执行的内容
天真的方法是创建一个VBScript,其中包含以下语句:
With WScript.Arguments.Named
If .Exists("c") Then ExecuteGlobal .Item("c")
End With
mshta vbscript:Execute("<your code here, delimit lines with : (colon)>:close")
但是,这不会正常工作,因为参数中不会保留双引号。如果按如下方式运行上述脚本:
With WScript.Arguments.Named
If .Exists("c") Then ExecuteGlobal .Item("c")
End With
mshta vbscript:Execute("<your code here, delimit lines with : (colon)>:close")
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语句,如下所示:
With WScript.Arguments.Named
If .Exists("c") Then ExecuteGlobal .Item("c")
End With
mshta vbscript:Execute("<your code here, delimit lines with : (colon)>:close")
C:\>vbsrunner.cmd“WScript.Echo”foo:WScript.Echo“bar”
福
条形码
如果您想复制Python的交互模式,可以使用my,但这仍然需要能够在某处创建文件。否,Windows附带的解释器(wscript.exe
和cscript.exe
)不支持这一点。如果你不能在任何地方创建一个文件,那你就倒霉了。您需要某种包装器脚本来将参数转换为VBScript解释器可以执行的内容
天真的方法是创建一个VBScript,其中包含以下语句:
With WScript.Arguments.Named
If .Exists("c") Then ExecuteGlobal .Item("c")
End With
mshta vbscript:Execute("<your code here, delimit lines with : (colon)>:close")
但是,这不会正常工作,因为参数中不会保留双引号。如果按如下方式运行上述脚本:
With WScript.Arguments.Named
If .Exists("c") Then ExecuteGlobal .Item("c")
End With
mshta vbscript:Execute("<your code here, delimit lines with : (colon)>:close")
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语句,如下所示:
With WScript.Arguments.Named
If .Exists("c") Then ExecuteGlobal .Item("c")
End With
mshta vbscript:Execute("<your code here, delimit lines with : (colon)>:close")
C:\>vbsrunner.cmd“WScript.Echo”foo:WScript.Echo“bar”
福
条形码
如果您想复制Python的交互模式,可以使用my,但这仍然需要能够在某处创建文件。有一个技巧可以使用,那就是mshta.exe。
您可以执行如下代码:
With WScript.Arguments.Named
If .Exists("c") Then ExecuteGlobal .Item("c")
End With
mshta vbscript:Execute("<your code here, delimit lines with : (colon)>:close")
mshta vbscript:Execute(“:close”)
这当然是一次疯狂的黑客攻击,在一个甚至不允许您创建文件的系统上,我不确定是否允许mshta.exe
也许你还可以从中找到更多的灵感(mshta解决方案也张贴在那里)。虽然它主要与批处理相关,但它是一个很好的汇编,其中包含了一些非常疯狂的方法,可以愚弄windows执行vbs代码。有一个技巧可以使用,那就是mshta.exe。
您可以执行如下代码:
With WScript.Arguments.Named
If .Exists("c") Then ExecuteGlobal .Item("c")
End With
mshta vbscript:Execute("<your code here, delimit lines with : (colon)>:close")
mshta vbscript:Execute(“:close”)
这当然是一次疯狂的黑客攻击,在一个甚至不允许您创建文件的系统上,我不确定是否允许mshta.exe
也许你还可以从中找到更多的灵感(mshta解决方案也张贴在那里)。虽然它主要与批处理相关,但它是一个伟大的汇编,其中包含了一些非常疯狂的方法,可以愚弄windows执行vbs代码。感谢您的宝贵意见!我成功地运行了以下行:“mshta vbscript:InputBox(“消息”、“标题”、“输入”)(window.close)”,但我不知道如何在控制台中打印结果。@chapportmshta.exe
不支持这一点。对于控制台输出,您需要cscript.exe
。您必须使用messagebox进行输出,或者您可以将所有输出收集到一个字符串中,然后执行“cmd/k echo”,从而使用所有输出创建一个新的cmd窗口……感谢您的出色输入!我成功地运行了以下行:“mshta vbscript:InputBox(“消息”、“标题”、“输入”)(window.close)”,但我不知道如何在控制台中打印结果。@chapportmshta.exe
不支持这一点。对于控制台输出,您需要cscript.exe
。您必须使用messagebox进行输出,或者您可以将所有输出收集到一个字符串中,然后执行“cmd/k echo”,从而创建一个包含所有输出的新cmd窗口。。。