VBScript执行和Eval命令

时间:2015-04-23 19:02:11

标签: vbscript

我有一个vbscript,它将从文本文件中读取命令。我正在考虑使用Execute和Eval命令来执行文件中的命令。显然,我会将该文件作为字符串读入,并将该字符串解析为Eval和Execute命令。但是,我不确定这是否可行,以及如何去做?

例如,假设我有以下文件:

x = 3
y = 4
z = x + y

Print z

在我的vbscript中,我想要以下内容:

' Read in file to string
' Split the string at the newline (commandList)
For Each str in commandList:
    Execute(str)
Next str

输出结果为:

7

我尝试了以下方法来获得概念证明:

执行(“x = 1”)

但是,我一直收到“在评估期间终止功能”错误。不确定我做错了什么。我对vbscript不太熟悉。

2 个答案:

答案 0 :(得分:1)

我认为最好的解释是:https://ss64.com/vb/execute.html。 简而言之,Eval()命令接受一个表达式并返回其值,而 Execute()命令接受一组语句并执行它们(我认为在全局范围内)。 通常,Eval()需要一些表达式结果,而Execute()则不需要。 有关详细说明,请参阅上面的链接。 保罗

答案 1 :(得分:0)

你的概念似乎是正确的。

==>type D:\VB_scripts\SO\29832173.vbs
option explicit
Dim commandList(2), str
commandList(0)= "x = 3"
commandList(1)= "y = 4"
commandList(2)= "z = x + y"
For Each str in commandList
  Execute str
Next
Wscript.echo x, y, z

==>cscript D:\VB_scripts\SO\29832173.vbs
3 4 7

==>

Explanation (Execute vs. Eval)

在VBScript中,x = y可以通过两种方式解释。第一个是作为赋值语句,其中y的值分配给x。第二种解释是测试xy是否具有相同值的表达式。如果他们这样做,结果是True;如果不是,则结果为FalseEval方法始终使用第二种解释,而Execute语句始终使用第一种解释。

关于OP's comment

编辑在进入For循环时,这会给我一个类型不匹配的错误。进行一些额外的调试{{1}并且echo循环已更改为For Each次迭代:

For...Next