我在一个相当老的Classic 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方法是用来计算表达式的,而表达式并不是声明或设置变量值的最合理的地方,但我想知道它是否仍然可能以某种方式存在。
非常感谢您的帮助。
发布于 2013-06-26 04:55:58
eval和“邪恶”不只是听起来很像。不管怎样,你需要eval做什么?您应该能够直接使用代码:
Set someVar = Nothing
Set someVar = CreateObject("Wscript.Shell")
response.write(someVar.CurrentDirectory)或者(甚至更简单)这样:
response.write CreateObject("Wscript.Shell").CurrentDirectory发布于 2013-06-26 16:55:17
除了您的代码具有非法赋值之外,您还应该从使用&字符而不是+字符连接字符串开始:
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问的那样:你想要实现什么?
https://stackoverflow.com/questions/17307194
复制相似问题