問:
您好,腳本專家!我們需要使用唯一標識號來跟蹤某些項目。我的上司建議我們使用 GUID 來實現這個目的。有什麼辦法可以使用腳本來創建 GUID 呢?
-- DX
答:
您好,DX。GUID(全局唯一標識符)適用於完成類似以下內容的任務;我們自認為並不了解 GUID 所基於的算法,但我們幾乎可以肯定地講,您生成的每一個 GUID 都是唯一的。盡管在理論上存在生成重復 GUID 的可能性,但 Bill Gates 將他所有的錢都送給腳本專家的可能性在理論上也是存在的。我們還是不要在這兩種可能性上勞神才是。
實際上,可以使用一種非常簡單的方法來生成 GUID,但這種方法近乎像是作弊。(您可聽清楚了,我們說的可是“近乎”。)“Scriptlet.TypeLib”對象的設計用途是幫助您創建“Windows 腳本組件”(實質上,這是一種使您編寫的腳本可以像 COM 對象那樣工作的方法)。Scriptlet.Typelib 對象包含一種方法,它可以生成與“Windows 腳本組件”類型庫一起使用的 GUID;不過,沒有理由不能使用該方法來生成用於其他用途的 GUID。(畢竟,GUID 就是 GUID。)如果您需要 GUID,下面這個由兩行代碼組成的腳本就可為您提供一個:
Set TypeLib = CreateObject("Scriptlet.TypeLib")
Wscript.Echo TypeLib.Guid
還不賴,是吧?當然,這個腳本所做的只是在消息框中回顯 GUID;如果實際上要在其他地方使用該 GUID,就必須將其鍵入。如果不是由於 GUID 像如下內容那麼冗長,這倒也不算什麼難事:
因此,像我們這樣樂於助人又喜歡標榜自己的家伙,當然要對腳本略做修改了。以下腳本可生成 GUID,然後將其復制到剪貼板,而不是顯示在消息框中:
Set TypeLib = CreateObject("Scriptlet.TypeLib")
strGUID = TypeLib.Guid
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate("about:blank")
objIE.document.parentwindow.clipboardData.SetData "text", strGUID
objIE.Quit
如果您想知道我們是怎樣做到的,實際上,我們又耍弄了一個小伎倆。VBScript 無法將項目復制到剪貼板,但 Internet Explorer 可以。因此,我們只是生成 GUID,然後將該值存儲在名為 strGUID 的變量中。接著,創建一個不可見的 Internet Explorer 實例,並使用“clipboardData.SetData”方法將該 GUID 復制到剪貼板。可使用以下這行代碼來執行這項操作:
objIE.document.parentwindow.clipboardData.SetData "text", strGUID
退出 Internet Explorer,現在您想要在哪裡使用該 GUID,就可以將其粘貼到哪裡。