strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colFileList = objWMIService.ExecQuery _
("ASSOCIATORS OF {Win32_Directory.Name='C:\TestLog'} Where " _
& "ResultClass = CIM_DataFile")
If colFileList.Count = 0 Then
Wscript.Echo "There were no files in the folder."
Else
Wscript.Echo "There were " & colFileList.Count & " files in the folder."
For Each objFile In colFileList
objFile.Delete
Next
End If
指令碼開始先是連接到本機電腦上的 WMI 服務。您要是在想我們為什麼選擇採用 WMI 來執行這項工作 (反而不是採用 FileSystemObject),這裡有個理由:雖然這個指令碼是設計用在本機電腦上,我們還是可以輕鬆將之修改成用在任何我們具有本機系統管理員權限的電腦。只要將 strComputer 的值從一個點 (在 WMI 中代表本機電腦) 改成遠端機器的名稱就可以了。這使用 FileSystemObject 就辦不到,至少沒那麼容易。
在連接到 WMI 服務之後,我們接著使用此行指令碼來擷取 C:\TestLog 資料夾中所有檔案的集合:
Set colFileList = objWMIService.ExecQuery _
("ASSOCIATORS OF {Win32_Directory.Name='C:\TestLog'} Where " _
& "ResultClass = CIM_DataFile")
沒錯,Associators Of 查詢看起來有點怪,可別讓那困擾到您。您真正需要知道的是:要使用任何其他資料夾 (例如 D:\Logfiles) 很簡單,只要將 C:\TestLog 路徑取代成 D:\Logfiles 路徑就行了:
Set colFileList = objWMIService.ExecQuery _
("ASSOCIATORS OF {Win32_Directory.Name='D:\Logfiles'} Where " _
& "ResultClass = CIM_DataFile")
當然,看起來是都沒問題,但我們要怎麼知道 C:\TestLog 內是否有檔案?那就要看我們的查詢,它會傳回一個集合,在此例中,該集合是由 C:\TestLog 資料夾中找到的全部檔案 (CIM_DataFile 類別的執行個體)。結果是,WMI 集合有個名為 Count 的屬性,會傳回集合中的項目數量。我們只要檢查看 Count 是不是等於 0,就可以確定資料夾中是否有任何檔案。
If colFileList.Count = 0 Then
假使 Count 的確等於 0,那表示資料夾中沒有檔案,這種情況下,我們會回應一則訊息,指出資料夾中沒有任何檔案。假使 Count 不等於 0,那麼我們會進行兩件事:首先,我們使用這行程式碼回報之前在資料夾中的檔案數量:
Wscript.Echo "There were " & colFileList.Count & " files in the folder."
其次,我們建立一個 For Each 迴圈來循環處理所有檔案的集合。我們對集合中的每個檔案呼叫 Delete 方法,並殺掉該檔案:
For Each objFile In colFileList
objFile.Delete
Next
完成 For Each 迴圈之後,所有檔案都會消失,而且大家從此幸福快樂的日子 (那些我們剛剛殺掉的檔案例外,希望它們是上了天堂)。 |