我在一个非常古老的经典ASP网络应用程序上得到了一些维护任务,当谈到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方法用于计算表达式,而表达式不是用于声明或设置变量值的最合理的位置,但我想知道它是否仍然可能以某种方式存在。
非常感谢您的帮助。
答案 0 :(得分:0)
eval
和“邪恶”不仅仅是相似的。无论如何你还需要eval
什么?您应该可以直接使用代码:
Set someVar = Nothing
Set someVar = CreateObject("Wscript.Shell")
response.write(someVar.CurrentDirectory)
或(甚至更简单)像这样:
response.write CreateObject("Wscript.Shell").CurrentDirectory
答案 1 :(得分: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
)来分隔不同的行,但使用分号更容易:
rs = so.Eval(scrObject.Eval("set someVar = Nothing : set someVar = CreateObject(" & Chr(34) & "Wscript.Shell" & Chr(34) & ") : response.write(someVar.CurrentDirectory)"))
但就像Ansgar Wiecher问的那样:你想要实现什么目标?