Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我是否可以直接从命令行运行vbscript命令(即不使用vbs文件)?_Vbscript_Wsh - Fatal编程技术网

我是否可以直接从命令行运行vbscript命令(即不使用vbs文件)?

我是否可以直接从命令行运行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

在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
)不支持这一点。如果你不能在任何地方创建一个文件,那你就倒霉了。您需要某种包装器脚本来将参数转换为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)”,但我不知道如何在控制台中打印结果。@chapport
mshta.exe
不支持这一点。对于控制台输出,您需要
cscript.exe
。您必须使用messagebox进行输出,或者您可以将所有输出收集到一个字符串中,然后执行“cmd/k echo”,从而使用所有输出创建一个新的cmd窗口……感谢您的出色输入!我成功地运行了以下行:“mshta vbscript:InputBox(“消息”、“标题”、“输入”)(window.close)”,但我不知道如何在控制台中打印结果。@chapport
mshta.exe
不支持这一点。对于控制台输出,您需要
cscript.exe
。您必须使用messagebox进行输出,或者您可以将所有输出收集到一个字符串中,然后执行“cmd/k echo”,从而创建一个包含所有输出的新cmd窗口。。。