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从文件读取变量名称和数据的主要内容,如果未能解决你的问题,请参考以下文章