VBS从文件读取变量名称和数据

时间:2015-03-20 19:50:59

标签: variables vbscript

我正在创建一个包含需要由用户设置的变量的脚本。我创建了一个ini文件,用户可以定义这些变量,而不必弄乱脚本本身。我需要VBS脚本能够读取文件并根据行的第一部分创建变量,然后根据该行的第二部分设置该变量的值。

ini文件看起来像这样

path=C:\users\whatever
filename=whatever.txt
FileTypes=txt,doc,mp3,etc

在批处理文件中,这很简单,您可以这样做:

for /f "delims=" %%x in (config.ini) do (set "")

如果在VBS中有一个同样简单的答案,我很乐意,但这就是我所拥有的(工作)

filename = "config.ini"
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(filename)
Do Until f.AtEndOfStream
  LineArray = Split(f.ReadLine , "=")
    Select Case LineArray(0)
        Case "path"
            path = LineArray(1)
        Case "filename"
            fname = LineArray(1)
        Case "FileTypes"
            FileTypes = LineArray(1)
    End Select
Loop

f.Close

这有效,但我本身必须自己重命名我的变量,而且脚本更难以维护而且效率不高。

如果我能用更像

的东西替换case语句会很好
DIM "LineArray(0)"=LineArray(1)

并让VBS识别LineArray(0)应该使用LineArray(0)的值作为变量的名称定义为新变量。

有没有办法在VBS中执行此操作?

2 个答案:

答案 0 :(得分:1)

Execute(或ExecuteGlobal)会根据您描述的输入执行您想要的操作。不过,我建议谨慎,因为这些语句不仅会定义变量,还会执行传递给它们的任何代码。使用dictionary是一种更安全的方法:

Set ini = CreateObject("Scripting.Dictionary")

Do Until f.AtEndOfStream
  line = f.ReadLine
  If InStr(line, "=") > 0 Then
    arr = Split(line, "=", 2)
    ini(Trim(arr(0))) = arr(1)
  End If
Loop

WScript.Echo ini("path")

特别是如果你想处理实际的INI文件,它可能包含几个部分(并且还包含注释):

[section1]
foo = "something"
bar = 42

[section2]
;this is a comment
foo = "something"
baz = 23

几年前我自己编写了这样一个INI解析器。您可以在blog上找到它。

答案 1 :(得分:0)

我明白了。答案是执行。我需要的简单路线是:

执行(LineArray(0)+" =" +" LineArray(1)")