Share via


嗨,Scripting Guy!

嗨,Scripting Guy!

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

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

今天的問題:如何刪除特定資料夾中的特定檔案?


如何刪除特定資料夾中的特定檔案?

嗨,Scripting Guy!如何存取資料夾 T:\Act 中的檔案,然後刪除檔名之中含字串「current」的所有檔案?

-- SC

SC,您好。我們必須承認,刪除所有目前 (current) 檔案的想法確實是很吸引人,對不對?嗯,當然對 Scripting Guys 來說,是沒什麼特別吸引力啦!我們的生活是這麼地完美,怎麼會想到要甩掉任何東西呢?呃,也許甩掉汽車貸款也不錯,還有房屋貨款。還有隔壁棟的狗,見了我們老像見了鬼一樣,咆哮個不停。(嘿,狗崽子!我們認識也有 10 年了,現在也該習慣了吧!)

不過差不多就這樣了。也許還有,不對,是一定要甩掉轉角那個整天坐在外面從來不穿上衣的老傢伙。呃,還有...好吧!我們最好還是回歸正題,刪除檔名之中包含「current」字串的所有檔案:

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colFileList = objWMIService.ExecQuery _
    ("ASSOCIATORS OF {Win32_Directory.Name='T:\Act'} Where " _
        & "ResultClass = CIM_DataFile")
For Each objFile In colFileList
    If InStr(objFile.FileName, "current") Then
        objFile.Delete
    End If
Next

這個指令碼開始的時候,跟我們很多的 WMI 指令碼一樣,都要先繫結至本機電腦上的 WMI 服務。(當然,跟大部分 WMI 指令碼一樣,也可以對遠端電腦加以執行)。然後我們要使用下列查詢,傳回資料夾 T:\Act 中所有檔案的集合:

Set colFileList = objWMIService.ExecQuery _
    ("ASSOCIATORS OF {Win32_Directory.Name='T:\Act'} Where " _
        & "ResultClass = CIM_DataFile")

接著建立 For Each 迴圈來逐一處理所有檔案的集合。在該迴圈中,我們使用 InStr 函式,確定能否在檔案名稱中找到「current」字串:

If InStr(objFile.FileName, "current") Then

如果 InStr 為 True,表示該字串確實可以在檔案名稱找到。此時,我們只用單單一行程式碼,就能刪除檔案:

objFile.Delete

沒錯:就這麼簡單!接著我們再執行迴圈,對集合中的下一個檔案重複此作業。全部執行完畢後,在 T:\Act 資料夾中,名稱內包含字串「current」的所有檔案都會消失在硬碟中。

或者,正經來說,就是這些檔案全都被刪除了。

要是我們也能就這麼輕易甩掉那輛橘色蠢車就好了,它甚至連車蓋都沒有呢!我們的鄰居就直接把它停在門外。還有那些想要佔領整片院子的黑莓樹叢。哎,說不盡道不完。


如需詳細資訊

請參閱嗨,Scripting Guy!- 過往文件

 

回到頁首 回到頁首