2009-06-09 112 views
28

我想在VBScript中生成GUID字符串。我知道VBScript中沒有內置函數來生成一個函數。我不想使用隨機生成的GUID。也許有一個可以使用CreateObject()創建的ActiveX對象,肯定會安裝在可以生成GUID的(新版本)Windows版本上?如何在VBScript中生成GUID?

+0

我想接受的答案具有低得多的質量比[最高投一個( http://stackoverflow.com/a/968790/2932052)。也許有理由重新考慮你的決定? – Wolf 2016-12-07 08:47:23

回答

28

How Can I Create a GUID Using a Script? (in: Hey, Scripting Guy! Blog)這樣說:

Set TypeLib = CreateObject("Scriptlet.TypeLib") 
Wscript.Echo TypeLib.Guid 

但是,請注意Scriptlet.TypeLib.Guid返回null結尾的字符串,這可能會導致一些事情要ignore everything after the GUID。爲了解決這個問題,您可能需要使用:

Set TypeLib = CreateObject("Scriptlet.TypeLib") 
myGuid = TypeLib.Guid 
myGuid = Left(myGuid, Len(myGuid)-2) 
Wscript.Echo myGuid 
+0

謝謝!我喜歡「嘿,腳本專家!」鏈接! – vividos 2009-06-09 21:50:24

+8

對於任何使用此方法的人,請注意,每次調用GUID屬性時,Scriptlet.TypeLib對象都會返回_相同的GUID_。如果您需要生成多個GUID,請銷燬並重新創建`Scriptlet.TypeLib`對象,或者更好地將其封裝到其他人顯示的函數中,以便在每次函數調用時創建和銷燬該對象。 – Bond 2015-06-29 21:03:05

2
Set tlib = Server.CreateObject("Scriptlet.TypeLib") 
strGuid = tlib.Guid 
41
Function CreateGUID 
    Dim TypeLib 
    Set TypeLib = CreateObject("Scriptlet.TypeLib") 
    CreateGUID = Mid(TypeLib.Guid, 2, 36) 
End Function 

這個函數會返回一個普通的GUID,例如47BC69BD-06A5-4617-B730-B644DBCD40A9

如果你想在一個註冊表格式的GUID,例如,{47BC69BD-06A5-4617-B730-B644DBCD40A9},函數的最後一行改爲

CreateGUID = Left(TypeLib.Guid, 38) 
8
' Returns a unique Guid on every call. Removes any cruft. 
Function CreateGuid() 
    CreateGuid = Left(CreateObject("Scriptlet.TypeLib").Guid,38) 
End Function