GUI 酷男的指令碼世界

Office Space

大家好,感謝與我們一同來探索第二篇《GUI 酷男的指令碼世界》。我們將利用上一次的所學所知來探索如何新增、刪除和修改已註冊的副檔名。若您對本專欄有任何指教,或想建議未來的討論內容,歡迎將電子郵件寄到 scripter@microsoft.com

本頁內容

再多延伸一點點
加入新的副檔名
刪除副檔名
變更現有的副檔名


再多延伸一點點

上一篇的 GUI Guy 中,我們探討了 [資料夾選項] 對話方塊的 [檔案類型] 索引標籤,並且學會如何使用指令碼來收集 [註冊的檔案類型] 清單中所顯示的內容。而在這一篇中,我們將進一步了解如何新增和刪除已註冊的副檔名,另外還會解說,如何為具有特定副檔名的檔案預設其開啟程式。

加入新的副檔名

讓我們先從新的副檔名開始。假設您希望副檔名 .text 被視作文字檔,可從 GUI 開啟 [資料夾選項] 對話方塊 (從檔案總管選取 [工具]->[資料夾選項],或從 [控制台] 選取 [資料夾選項),瀏覽至 [檔案類型] 索引標籤,並按一下 [新增] 按鈕。接著,在 [建立新副檔名] 對話方塊中的 [副檔名] 文字方塊內,輸入「text」,並從 [關聯的檔案類型] 下拉式清單方塊中選取 [文字文件] (假如您沒有看到 [關聯的檔案類型] 下拉式清單方塊,按一下 [進階] 按鈕)。平常您是按一下 [確定] 就完事了,這次請改按 [取消],我們要以指令碼撰寫的方式來完成這項工作。

[資料夾選項] 對話方塊

在 [建立新副檔名] 對話方塊中按一下 [確定],會在 HKLM\SOFTWARE\Classes (或在 HKEY_CLASSES_ROOT 也一樣) 下加入新的登錄機碼。登錄機碼的名稱前面會有一點 (.),而在本例中,關聯的檔案類型的預設名稱為 txtfile

以下的指令碼使用 WMI 登錄提供者對登錄進行相同變更,也就是將 TEXT 新增為註冊的副檔名。


Const HKEY_LOCAL_MACHINE = &H80000002
strComputer  = "."
strExtension = "TEXT"
strFileType  = "txtfile"

Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
 strComputer & "\root\default:StdRegProv")
  
strKeyPath = "SOFTWARE\Classes\." & strExtension
objReg.CreateKey HKEY_LOCAL_MACHINE,strKeyPath

strNewKeyPath = "SOFTWARE\Classes\." & strExtension
strEntryName = "
objReg.SetStringValue HKEY_LOCAL_MACHINE,strNewKeyPath,strEntryName,strFileType


此指令碼使用登錄提供者中的 CreateKey 方法在 SOFTWARE\Classes 內加入一個子機碼,而子機碼的名稱是存放在 strExtension 變數中的副檔名,前面有一點 (.)。執行指令碼之後,GUI 的結果如下。

[資料夾選項] 對話方塊

建立子機碼之後,指令碼會使用登錄提供者中的 SetStringValue 方法在新的機碼內加入一個預設值。所新增的預設值即新的副檔名所對應到的檔案類型,它會存放在 strFileType 變數中。這裡有幾點要注意:首先,strEntryName 變數會設為空白字串來指定預設值;其次,「txtfile」檔案類型名稱是之前就存在且已經註冊的檔案類型,您可以在登錄編輯程式 (regedit.exe) 中點按並尋找其他註冊副檔名的預設值,或執行在上一篇 GUI Guy 文章中所提供的指令碼來「探索」此一檔案名稱類型。

刪除副檔名

使用 GUI 時,要想刪除一個副檔名對應,可以從 [註冊的檔案類型] 清單方塊中選取相對應的副檔名,再按 [刪除] 按鈕即可。所得到的結果是,HKEY_CLASSES_ROOT 下的 .TEXT 子機碼以及其內所有內容全都會被刪除。以下的指令碼,會對我們使用前一個指令碼所新增的 .TEXT 副檔案,進行這些工作。


Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
strExtension = "TEXT"

Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
 strComputer & "\root\default:StdRegProv")
 
strKeyPath = "SOFTWARE\Classes\." & strExtension
objReg.DeleteKey HKEY_LOCAL_MACHINE, strKeyPath


變更現有的副檔名

當註冊 .TEXT 副檔名時,我們會指出它是 txtfile 類型。在註冊副檔名之後,GUI 指出 .TEXT 檔案會以記事本開啟。

[資料夾選項] 對話方塊

您可以在 GUI 中變更具有某副檔名之檔案的預設開啟程式。以下是按下 [變更] 按鈕後顯示出的對話方塊。

[資料夾選項] 對話方塊

一旦變更該種檔案的開啟程式之後,該檔案就不再被視作「文字文件」類型 (即對應到「txtfile」的類型),而是另一種類型的檔案,即「文字檔案」,如下面的螢幕擷取畫面所示;此畫面是在將 TEXT 檔的開啟程式變更為 Internet Explorer 之後所擷取的。

[資料夾選項] 對話方塊

此程式對應一經變更之後,就會存放在 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.TEXT 登錄機碼中。該機碼中的 Application 值接著會設為新程式的名稱。

以下指令碼會變更具有特定副檔名之檔案的預設開啟程式。


Const HKEY_CURRENT_USER = &H80000001
strComputer  = "."
strExtension = "TEXT"
strFileExtsKey = "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\"
strNewProgram = "excel.exe"
 
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
 strComputer & "\root\default:StdRegProv")
  
strKeyPath = strFileExtsKey & "." & strExtension

strEntryName = "Application"
objReg.SetStringValue _
HKEY_CURRENT_USER,strKeyPath,strEntryName,strNewProgram


此一指令碼使用 SetStringValue 方法來更新 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.TEXT 機碼中的 Application 值。它將該值更新成存放在 strNewProgram 變數中的程式可執行檔之檔名 (在此例中為 Excel.exe)。下面的螢幕擷取畫面顯示 GUI 在執行指令碼之後,反映出將 .TEXT 副檔名對應到 Microsoft Excel。

HKCR 中的檔案說明

此一 GUI Guy 文章連同前一篇文章一起提供您使用指令碼管理副檔名的基本入門資訊。您需要從單部機器晉升到管理多組機器,才能真正發揮指令碼的威力。將兩篇文章中的指令碼加以簡單地修改就可以管理多組機器。若是管理單部遠端機器,只要將出現在每個指令碼頂端的 strComputer 變數值變更為遠端機器的名稱就可以了。若沒有特殊指明,表示 Scripting Guys 將該變數設定為一點 (.),也就是 localhost 的同義字。您可以自己實驗看看,變更第一篇專欄內的任一個「唯讀」指令碼,將 strComputer 變數值變更為 NetBIOS 名稱或網路上的遠端機器 (您的身分為其本機系統管理員) 的 IP 位址 (您必須是本機的系統管理員才能使用 WMI 指令碼遠端管理電腦)。一旦對遠端電腦執行指令碼之後,可參考 Script Center (指令碼中心) 裡面的範本。這些範本會指引您更改指令碼來進行一些動作,像是在多部機器上執行,或從文字檔讀取輸入等。

在此希望您在初步探索指令碼之際,體驗到了其中的樂趣,也歡迎您日後再度光臨本網站,閱讀下一篇文章,下次的 GUI 指令碼的重點是如何管理檔案和資料夾的權限。感謝您閱讀本文,祝您編寫指令碼愉快,我們下次再見。

顯示: