我有一个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不太熟悉。
答案 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
。第二种解释是测试x
和y
是否具有相同值的表达式。如果他们这样做,结果是True
;如果不是,则结果为False
。 Eval
方法始终使用第二种解释,而Execute
语句始终使用第一种解释。
编辑:在进入For循环时,这会给我一个类型不匹配的错误。进行一些额外的调试{{1}并且echo
循环已更改为For Each
次迭代:
For...Next