我正在创建一个包含需要由用户设置的变量的脚本。我创建了一个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中执行此操作?
答案 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)")