0

我在一个非常古老的经典 ASP Web 应用程序上完成了一些维护任务,而对于 VBScript,我有点一无所知......

我想知道是否可以使用 MSScriptControl.ScriptControl 对象的 Eval 方法设置变量的值。另请注意,在调用 Eval() 之前使用 ScriptControl 的 AddCode 方法在特定情况下不是一个选项。这是一些演示问题的示例代码:

Dim so,rs,someVar
set someVar=...
set so=server.CreateObject("MSScriptControl.ScriptControl")
so.Language = "VBScript"
so.AllowUI = False
so.AddObject "someVar",someVar

' I get a syntax error here
rs = so.Eval(scrObject.Eval("set someVar = Nothing" & "set someVar = CreateObject("+Chr(34)+"Wscript.Shell"+Chr(34)+")" & "response.write(someVar.CurrentDirectory)"))

' if I try something like this I get a syntax error as well..
rs = so.Eval("Dim someVar2 : someVar2="+Chr(34)+"test"+Chr(34)+" : response.write(someVar2)")

我知道 Eval 方法用于评估表达式,表达式不是声明或设置变量值的最合理的地方,但我想知道它是否仍然可能以某种方式。

非常感谢您的帮助。

4

2 回答 2

0

除了您的代码有非法赋值之外,您应该从将字符串与&字符而不是+字符连接开始:

rs = so.Eval(scrObject.Eval("set someVar = Nothing" & "set someVar = CreateObject(" & Chr(34) & "Wscript.Shell" & Chr(34) & ")" & "response.write(someVar.CurrentDirectory)"))

但现在你的输出将是一个字符串,如:

set someVar = Nothingset someVar = CreateObject("Wscript.Shell")response.write(someVar.CurrentDirectory)

这不是有效的 VBScript。您可以使用换行符 ( vbNewLine's) 来分隔不同的行,但使用分号更容易:

rs = so.Eval(scrObject.Eval("set someVar = Nothing : set someVar = CreateObject(" & Chr(34) & "Wscript.Shell" & Chr(34) & ") : response.write(someVar.CurrentDirectory)"))

但就像 Ansgar Wiecher 所问的那样:你想要达到什么目的?

于 2013-06-26T08:55:16.960 回答
0

eval和“邪恶”不仅仅是听起来相似。你还需要什么eval?您应该可以直接使用代码:

Set someVar = Nothing
Set someVar = CreateObject("Wscript.Shell")
response.write(someVar.CurrentDirectory)

或者(甚至更简单)像这样:

response.write CreateObject("Wscript.Shell").CurrentDirectory
于 2013-06-25T20:55:58.053 回答