嗨,Scripting Guy!

嗨,Scripting Guy!

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

還有,別忘了瞧瞧全新經過改良的嗨,Scripting Guy!過往文件

今天的問題:如何確認某資料夾 (C:\TestLog) 中是否有檔案,如果有的話,如何刪除所有這些檔案?


如何確認資料夾中是否有檔案,如果有的話,如何刪除該些檔案?

嗨,Scripting Guy!如何確認某資料夾 (C:\TestLog) 中是否有檔案,如果有的話,如何刪除所有這些檔案?

-- DC

DC,您好。在我們開始之前,應該指出在使用 WMI 時,資料夾裡面是否有檔案並不重要,您還是可以告訴 WMI 刪除該資料夾中所有的檔案。如果沒有檔案,對 WMI 也無傷。為什麼要告訴您這個?只是要註明,如果您只關心刪除檔案,那麼並不需要擔心確認資料夾是否真有檔案,直接刪除就好了。

當然啦,您可能有其他的理由想要知道資料夾中是否有任何檔案。要是如此,我們想出了這麼一個指令碼:

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 迴圈之後,所有檔案都會消失,而且大家從此幸福快樂的日子 (那些我們剛剛殺掉的檔案例外,希望它們是上了天堂)。


如需詳細資訊

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

 

回到頁首 回到頁首