嗨,Scripting Guy!

Hey,Scripting Guy!

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

今天的問題:我要如何刪除 Temporary Internet Files 資料夾中的檔案?


我要如何刪除 Temporary Internet Files 資料夾中的檔案?

嗨,Scripting Guy!有什麼方法可以使用指令碼刪除 [Temporary Internet Files] 資料夾中的所有檔案?

-- KR

KR,您好。知道嗎?經您這樣一問,有某位 Scripting Guy (當然不能公佈姓名) 不禁自問:「嗯,不知道我的 [Temporary Internet Files] 資料夾裡有什麼東西?」結果查看後,發現資料夾竟然包含 239 MB 的垃圾;幾乎就像他描述的 - 整個網際網路都存在硬碟上了。

換句話說,使用指令碼刪除 [Temporary Internet Files] 資料夾中的所有檔案,看來的確有需要。

唯一複雜的因素在於:判斷使用者的 [Temporary Internet Files] 資料夾在「哪裡」。一般而言,這項資訊可以在使用者的本機使用者設定檔中找到,通常是像 C:\Documents and Settings\kenmyer\Local Settings\Temporary Internet Files。然而,資料夾未必一定在那裡,畢竟連 Windows 都不一定安裝在 C 磁碟上。也就是說,撰寫這個指令碼的重點取決於找出 [Temporary Internet Files] 資料夾;只要找到資料夾,就能輕而易舉地刪除所有檔案。

那麼要如何找到這個資料夾?答案是 [Temporary Internet Files] 資料夾是一個「特殊」的資料夾,根據預設,它在所有的 Windows 安裝上都可以找到,而且作業系統會持續留意這個資料夾,不論您對這個資料夾進行何種作業,Windows 都會知道它的下落。基於這個原因,您可以使用 Shell 物件 (不管特殊資料夾的實體位置在哪裡,Shell 物件都可以找到資料夾) 判斷 Temporary Internet Files 的路徑,然後使用該路徑繫結到資料夾,再刪除當中的所有檔案。

但會有一個問題:您無法從遠端建立 Shell 物件。這代表您需要登入或登出指令碼才能執行這個指令碼,或者是將它複製到遠端電腦並使用 WMI Win32_Process 類別在遠端電腦上啟動指令碼。如需詳細資訊,可以參閱這篇嗨,Scripting Guy! (英文) 專欄,其中說明如何使用 Win32_Process 在遠端電腦執行 md 命令。

讓我們來看看這段指令碼:

Const TEMPORARY_INTERNET_FILES = &H20&
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(TEMPORARY_INTERNET_FILES)
Set objFolderItem = objFolder.Self
strPath = objFolderItem.Path & "\*.*"
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile(strPath)

是的,我們知道:看到這麼一串字,您可能會認為這有些複雜,對不對?一開始是將常數 TEMPORARY_INTERNET_FILES 設定成 &H20&,這是連接到 Temporary Internet Files 資料夾所需要的值 (稍後會做更多說明)。然後建立 Shell 物件,並使用 Namespace 方法找到資料夾。配合 Shell 物件有些古怪的特性,我們會呼叫 Self 方法實際連接到資料夾,這即是這行程式碼的作用:

Set objFolderItem = objFolder.Self

這時,我們可以判斷目標資料夾的實際路徑 (例如,C:\Documents and Settings\kenmyer\Local Settings\Temporary Internet Files)。如果我們只是想要知道這個路徑,就可以使用類似這樣的程式碼行:

Wscript.Echo objFolderItem.Path

但是,我們想要使用 FileSystemObject 刪除資料夾中的所有檔案。為了做到這點,必須使用標準萬用字元以代表資料夾中的所有檔案,傳遞類似的路徑給 FileSystemObject:

C:\Documents and Settings\kenmyer\Local Settings\Temporary Internet Files\*.*

然後使用這行程式碼建立該路徑:

strPath = objFolderItem.Path & "\*.*"

如您所見,我們採用 Shell 物件傳回的路徑,再加上 \*.*。最後需要一個命令通知 FileSystemObject 刪除資料夾中的所有檔案。

這也就是最後兩行程式碼的作用:建立 FileSystemObject 執行個體,然後使用 DeleteFile 方法刪除所有檔案。像這樣就可以清除 [Temporary Internet Files] 資料夾。

當然,既然您注意到這個問題,可能也會想要清除網際網路 [Cookies] 資料夾。以下是進行這項作業的指令碼:

Const COOKIES = &H21&
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(COOKIES)
Set objFolderItem = objFolder.Self
strPath = objFolderItem.Path & "\*.*"
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile(strPath)

很棒吧?

順便一提,我們有預感,一旦張貼這篇專欄後,讀者就會開始不斷地發問:「那要怎麼連接到 [我的圖片] 資料夾呢?」或是:「有什麼方法可以連接到 [我最近的文件] 資料夾?」因此,我們事先在指令碼中心指令碼存放庫 (英文) 中,加入 38 個新的指令碼,這些指令碼會示範使用 Shell 物件連接到每個特殊資料夾的方式。請盡情享用!


如需詳細資訊

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

 

回到頁首 回到頁首