1

我正在尝试使用 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 具有正确的值。

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

4

3 回答 3

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 是否具有相同的值。如果他们这样做,则结果为 True;如果不是,则结果为 False。Execute 语句始终使用第一种解释,而 Eval 方法始终使用第二种解释。

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

于 2013-06-05T19:02:01.237 回答
1

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

您想要分配给– 如果是,您想要 eval的。 您可以通过连接字符串来做到这一点:pair.keypair.keymyPathmyPath = pair.value

Execute(pair.name + " = pair.value")
于 2013-06-05T18:34:52.000 回答
0

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

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
于 2013-06-05T21:08:05.933 回答