【问题标题】:How to write GUID to .ini file using vbscript?如何使用 vbscript 将 GUID 写入 .ini 文件?
【发布时间】:2014-01-31 20:44:55
【问题描述】:

如何使用 vbscript 将 GUID 写入 .ini 文件?

guid = CreateGUID()
WriteIni "testsection", "ID", guid, "H:\test123.ini"        
Function CreateGUID()
    CreateGUID = ""
    Set objTypeLib = CreateObject("Scriptlet.TypeLib")
    Wscript.Echo "GUID: " & objTypeLib.Guid
    CreateGUID = objTypeLib.Guid
End Function

上面的代码不能正常工作,它将一些其他字符附加到 .ini 文件的 GUID。例如:

将 GUID 写入test123.ini 后:

[testsection]
ID=EAE11CC4-F60E-4B21-8AA8-E0CE2ADE5521 5

这里添加了额外的字符(例如: 5 )。它必须像这样更新文件:

[testsection]
ID=EAE11CC4-F60E-4B21-8AA8-E0CE2ADE5521

【问题讨论】:

    标签: windows vbscript guid ini


    【解决方案1】:

    这是Scriptlet.TypeLib 对象中的一个已知错误。 Guid 属性应该是 38 个字符长,但返回的长度为 40,最后有 2 个垃圾字符。您需要修剪 Guid 值以避免该问题:

    Function CreateGUID()
      CreateGUID = ""
      Set objTypeLib = CreateObject("Scriptlet.TypeLib")
      CreateGUID = Left(TypeLib.Guid, 38)     ' With curly braces: {47BC69BD-06A5-4617-B730-B644DBCD40A9}
      ' CreateGUID = Mid(TypeLib.Guid, 2, 36) ' Without curly braces: 47BC69BD-06A5-4617-B730-B644DBCD40A9
    End Function
    

    【讨论】:

    • 感谢您的回答。删除 GUID 中的垃圾值后,它起作用了。
    【解决方案2】:

    你让这变得比它需要的更复杂。我建议将 INI 文件读入字典字典,这样的文件是这样的:

    [Section1]
    value1="foo"
    value2="bar"
    
    [Section2]
    valueX="baz"
    

    变成这样的数据结构:

    +-Section1
    | +-value1 -> "foo"
    | `-value2 -> "bar"
    `-Section2
      `-valueX -> "baz"
    

    然后您可以像这样简单地将 GUID 添加到给定部分:

    section = "Section1"
    
    If Not ini.Exists(section) Then
      ini.Add section, CreateObject("Scripting.Dictionary")
    End If
    
    ini(section)("ID") = CreateObject("Scriptlet.TypeLib").GUID
    

    然后将数据写回到这样的文件中:

    Set fso = CreateObject("Scripting.FileSystemObject")
    
    Set f = fso.OpenTextFile("C:\path\to\your.ini", 2)
    For Each section In ini.Keys
      f.WriteLine "[" & section & "]"
      For Each value In ini(section).Keys
        f.WriteLine value & "=" & Chr(34) & ini(section)(value) & Chr(34)
      Next
      f.WriteLine
    Next
    f.Close
    

    不久前,我编写了一个程序 (ParseIni) 用于将 INI 文件解析为此类数据结构。

    【讨论】:

    • 感谢您的回复。我将导入这些更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 2017-03-07
    • 2013-06-14
    • 1970-01-01
    • 2010-11-11
    相关资源
    最近更新 更多