iT邦幫忙

0

如何用vbs定期刪除和搬移特定檔案

vbs
  • 分享至 

  • xImage

我想要用vbs實現定期搬移和刪除舊檔案
我在網路上有看到一篇文章
http://blog.lyhdev.com/2007/05/vbscript.html
上面的方式我可以成功把特定資料夾下過期的檔案刪除
但是無法把"子資料夾"裡面的過期檔案也刪除
請問要加哪些參數才可以把"子資料夾"裡面的特定檔案也刪除呢?

最好可以把完整的程式碼加說明附上,不然我很難理解~~~~
原諒我是菜鳥!!

請問,如果我要出現"詢問天數"與"確認路徑"的話,要如何做呢?感恩!
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

34
alexc
iT邦高手 1 級 ‧ 2008-09-10 22:42:49
最佳解答

要我看別人的程式碼,然後加以修改,這個我沒辦法
因為每個人的邏輯想法都不一樣
所以只好用自己的邏輯寫一個還算堪用的幾行程式

<pre class="c" name="code">
' 指定所有變數必須事先宣告才能使用
Option Explicit

WScript.Echo("作業開始執行:" & Date & " " & Time)

' 宣告變數
Dim FSO, agoDays, modifiedDate, delFolder

' 請將下面的變數值換成你要的
' == 開始 ==
' 指定 n 天前的檔案,現在是 3 天前
agoDays = 3
' 欲刪除檔案所在之目錄
delFolder = "D:\Temp"
' == 結束 ==

' 建立檔案系統物件(File System Object)
Set FSO = CreateObject("Scripting.FileSystemObject")

' 取得檔案的修改日期
modifiedDate = DateAdd("d", -agoDays, Date)

' 呼叫刪除檔案的子程序
DelFilesInFolder FSO.GetFolder(delFolder)

' 刪除檔案的子程序
Sub DelFilesInFolder(folder)
	' 宣告變數
	Dim file, subFolder

	' 找出目前所在目錄內所有的檔案
	For Each file In folder.Files
		' 檢查檔案日期是否符合條件,若符合,就刪除
		If ((file.DateLastModified <= modifiedDate)) Then
			file.delete
		End If
	Next

	' 如果遇到子目錄,也要進去檢查並刪除
	For Each subFolder in folder.SubFolders
		DelFilesInFolder subFolder
	Next
End Sub

WScript.Echo("作業執行完畢:" & Date & " " & Time)
看更多先前的回應...收起先前的回應...
ericshn iT邦新手 5 級 ‧ 2008-09-11 11:45:23 檢舉

非常感謝
您寫的很請楚

ericshn iT邦新手 5 級 ‧ 2008-09-11 16:43:23 檢舉

能在請教一下
我要怎樣才能把子目錄夾設定成我所規定的多個子目錄
而不是所有的子目錄

如果子資料夾沒有名稱重複的疑慮
加在
For Each subFolder in folder.SubFolders
的下一行做名稱的過濾就可以了

alexc iT邦高手 1 級 ‧ 2008-09-13 00:55:02 檢舉

你的狀況是怎樣?是要刪除的目錄有很多個,而且都在不同的地方,像這樣:
D:\Temp
C:\1234
C:\3423
D:\A134
D:\eepc

阿,如果是這樣,可以把目錄當作參數傳進去,然後用下面的方法把參數所代表的目錄取出來
Set myArgs = WScript.Arguments
delFolder = myArgs(0)

假設那個 vbs 的檔名叫做 DelFolders.vbs,就可以用下面這樣的方法去呼叫
DelFolders.vbs D:\Temp
DelFolders.vbs C:\1234
DelFolders.vbs C:\3423
DelFolders.vbs D:\A134
DelFolders.vbs D:\eepc

ericshn iT邦新手 5 級 ‧ 2008-09-13 03:27:27 檢舉

有點不懂您的意思
Set myArgs = WScript.Arguments
delFolder = myArgs(0)
這邊我懂
可是
DelFolders.vbs D:\Temp
DelFolders.vbs C:\1234
DelFolders.vbs C:\3423
DelFolders.vbs D:\A134
DelFolders.vbs D:\eepc
這邊我就不太知道怎樣呼叫

另外,我的情況比較像是樓上myepaper01 所說的
應該是要過濾名稱
可是~我還不懂!!
原諒我是程式門外漢

我很努力的問google,不過對於沒有基礎的人實在是很辛苦!!

我要發表回答

立即登入回答