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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VBS从文件读取变量名称和数据相关的知识,希望对你有一定的参考价值。

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

ini文件看起来像这样

path=C:userswhatever
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中这样做?

答案

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上找到它。

另一答案

我想到了。答案是执行。我需要的简单线条是:

执行(LineArray(0)+“=”+“LineArray(1)”)

以上是关于VBS从文件读取变量名称和数据的主要内容,如果未能解决你的问题,请参考以下文章

vbs 逐行读取文本文件并用逗号分割

如何在vbs中设置可以在调用批处理脚本中读取的环境变量

如何将多个变量从 VBS 传递到批处理脚本?

vbs读取指定的文本内容

VBS怎么往CSV文件中写数据

Vbs读取txt文本,高手进