Share via


嗨,Scripting Guy!

Hey,Scripting Guy!

歡迎使用全新的 TechNet 專欄,Microsoft Scripting Guy 會在此為您解答有關系統管理指令碼的常見問題。您有關於系統管理指令碼方面的問題嗎?請將電子郵件傳送到 scripter@microsoft.com。我們無法保證能夠逐一回答每個問題,不過我們會盡力而為。

今天的問題:我要如何使用指令碼列印文字檔?


我要如何使用指令碼列印文字檔?

嗨,Scripting Guy!我在某資料夾中擁有一堆文字檔案。是否有用指令碼列印這些檔案的方法?我知道我能從指令碼使用 Microsoft Word 來列印檔案,不過這部電腦沒有安裝 Microsoft Word。

-- MA

MA,您好。請不要告訴任何 Microsoft 人員我們透露這項資訊。沒有安裝 Microsoft Word 也沒關係,沒有它也能列印一些文字檔案。替代的做法,是使用內建在作業系統中的 Shell 物件來列印文字檔。這項事實最棒的地方在於,儘管 Shell 物件沒有 Print 方法,您依然可以列印這些檔案。很奇怪吧?不過這是千真萬確的!

由於 Shell 物件具有稱為 InvokeVerbEx 的方法,讓您能執行在 Windows 檔案總管中用滑鼠右鍵按一下檔案時便會出現的各項工作,因此您可以辦到這點。請用滑鼠右鍵按一下其中一個文字檔,然後查看出現的快顯功能表。您應該會看到如 [開啟]、[列印]、[編輯]、[剪下]、[貼上]、[刪除] 等項目。Shell 物件讓您能以程式設計方式執行這所有的工作。事實上,以下這個指令碼能夠列印資料夾 C:\Logs 內的所有檔案:

TargetFolder = "C:\Logs" 
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(TargetFolder) 
Set colItems = objFolder.Items
For Each objItem in colItems
    objItem.InvokeVerbEx("Print")
Next

我們只不過是連結到 C:\Logs 資料夾,然後抓取在該資料夾中發現的所有項目的集合。我們用這行程式碼將檔案組合儲存在變數 colItems 之中:

Set colItems = objFolder.Items

請注意,在此範例中我們確使 C:\Logs 只包含記錄檔,而且要列印所有的檔案,以便讓工作更為容易。如果 C:\Logs 含有其他檔案,也就是我們「不要」列印的檔案,您就必須加入程式碼,將想要列印和不要列印的檔案加以區分。

在 colItems 儲存檔案組合之後,我們使用 For Each 迴圈來循環通過集合中的所有項目。針對集合中的每個項目 (換句話說,就是資料夾中的每個檔案),我們使用 InvokeVerbEx 方法,並告知 InvokeVerbEx 我們想要列印每個檔案:

objItem.InvokeVerbEx("Print")

就是這麼簡單。執行這個指令碼以後,所有的檔案就會逐一適當地列印出來。

如果現在我們想要進行其他作業,比如說,編輯每個檔案?沒問題;只要以快顯功能表中的適當參數名稱來取代 Print 參數即可辦到:

TargetFolder = "C:\Logs" 
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(TargetFolder) 
Set colItems = objFolder.Items
For Each objItem in colItems
    objItem.InvokeVerbEx("Edit")
Next

在此必須留意的事實為,當您使用 InvokeVerbEx 時,您的指令碼就會複寫您在 Windows 檔案總管中看到的相同動作。例如:如果用滑鼠右鍵按一下檔案並選擇 [刪除],在 Windows 檔案總管中會發生什麼事?沒錯:檔案不會自動刪除,而是出現對話方塊詢問您是否確定要將檔案傳送到「資源回收筒」中。這是相當重要的,因為如果您將 Delete 傳遞給 InvokeVerbEx,就會出現相同的對話方塊。這個指令碼不會自動刪除 C:\Logs 之中的檔案,而會為資料夾中的每個檔案顯示確認對話方塊:

TargetFolder = "C:\Logs" 
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(TargetFolder) 
Set colItems = objFolder.Items
For Each objItem in colItems
    objItem.InvokeVerbEx("Delete")
Next

並且也請留意,您可能無法使用出現在快顯功能表中的「所有」選項。如需關於判斷哪些選項可以使用與哪些選項無法使用的詳細資訊,請參閱 Microsoft Windows 2000 指令碼指南 (英文) 中的此節。


如需詳細資訊

查看嗨,Scripting Guy!- 過往文件

 

回到頁首 回到頁首