vbscript将一个字符串Eval一个循环中的变量?

时间:2013-06-05 18:28:12

标签: string variables vbscript eval execute

我正在尝试使用vbscript的Eval(或者我可能需要Execute)从ini文件中的键名创建一些变量。 ini文件可以具有无限的未知key = val对。无论如何,我都需要根据键名创建一个变量。

Ini文件内容:

myPath=c:\test
myExe=myapp.exe
....
xxx=123
yyy=abc

我的代码读取ini并将键和值返回给对象

我正在尝试的代码在这里:

For each pair in objINI
    Eval("pair.key=pair.val")
Next

msgbox myPath
msgbox myExe

但两个msgbox都显示为空 是的,我确信pair.key和pair.val具有正确的值。

关于我缺少什么或者是否可能这样做的想法?

3 个答案:

答案 0 :(得分:3)

你需要Execute(一个赋值语句),而不是Eval(使用布尔表达式):

>> n = "Name"
>> v = "Value"
>> WScript.Echo TypeName(Eval("n=v"))
>>
Boolean
>> Execute "n=v"
>> WScript.Echo n
>>
Value
>>

来自文档:

  

在VBScript中,x = y可以用两种方式解释。第一个是作为   赋值语句,其中y的值分配给x。该   第二种解释是作为测试x和y是否具有的表达式   相同的价值。如果他们这样做,结果是真的;如果他们不是,结果是   假。 Execute语句总是使用第一个解释,   而Eval方法总是使用第二种方法。

(这并不意味着你应该做这些事;无论是在家里还是在工作中)

答案 1 :(得分:1)

您评估了文字代码pair.key = pair.value 这将分配给pair.key

您要分配到pair.key - 如果pair.keymyPath,您需要评估myPath = pair.value
你可以通过连接字符串来做到这一点:

Execute(pair.name + " = pair.value")

答案 2 :(得分:0)

如果要从INI文件中读取键/值对,最好将它们存储在字典中。几年前我为此写了function。基本上看起来像这样:

Function ParseIni(filename)
  Set ParseIni = Nothing

  Set config = CreateObject("Scripting.Dictionary")
  section = ""

  Set file = CreateObject("Scripting.FileSystemObject").OpenTextFile(filename)
  Do While Not file.AtEndOfStream
    line = Trim(Replace(file.ReadLine, vbTab, " "))
    If InStr(line, ";") > 0 Then line = Trim(Left(line, InStr(line, ";") - 1))
    If line <> "" Then
      If Left(line, 1) = "[" And Right(line, 1) = "]" Then
        ' line is a section name
        section = Trim(Mid(line, 2, Len(line) - 2))
        If section = "" Then _
          WScript.Echo "Parse Error: section name is empty string."
        If config.Exists(section) Then _
          WScript.Echo "Parse Error: duplicate section name '" & name & "'."
        config.Add section, CreateObject("Scripting.Dictionary")
      ElseIf InStr(line, "=") > 0 Then
        ' line is a parameter line
        If section = "" And Not config.Exists(section) Then _
          config.Add section, CreateObject("Scripting.Dictionary")
        param = Split(line, "=", 2)
        param(0) = Trim(param(0))
        param(1) = Trim(param(1))
        If param(0) = "" Then _
          WScript.Echo "Parse Error: invalid parameter name '" & param(0) & "'."
        If param(1) = "" Then param(1) = True
        config(section).Add param(0), param(1)
      Else
        ' line is neither parameter nor section name, thus invalid
        WScript.Echo "Parse Error: expected parameter definition in line '" _
          & line & "'."
      End If
    End If
  Loop
  file.Close

  Set ParseIni = config
End Function