iT邦幫忙

0

備分問題

  • 分享至 

  • twitterImage

批次檔--
如何在一個資料夾內 只留最近這三天的檔案

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
18
hon2006
iT邦大師 1 級 ‧ 2013-04-22 08:52:52
最佳解答

先去下載 forfiles
forfiles /p "E:\bak" /s /d -3 /c "cmd /c del @FILE"

教學參考
http://brianchang168.blogspot.tw/2008/04/forfiles-windows.html
http://diary.tw/tim

8
IT緣來爐主
iT邦新手 2 級 ‧ 2013-04-22 10:16:04

peter0921提到:
只留最近這三天的檔案

Option Explicit

'Wscript.Echo("Started:" & Date & " " & Time)

'宣告變數
Private FSO,DelFile,File,dstFolder,modifiedDate1,modifiedDate2,subFolder
'Private DelFile

'程式開始
Set FSO = CreateObject("Scripting.FileSystemObject")

'設定要處理的目錄
DelFile = "D:\TEMP"

'取得最近的一個檔案修改日期
Set dstFolder = FSO.GetFolder("D:\TEMP")
For Each File In dstFolder.Files
'判斷日期
if ((File.DateLastModified >= modifiedDate1)) Then
modifiedDate1 = File.DateLastModified
'WScript.Echo "最近日期1: " & modifiedDate1
End If
Next

'最近的檔案修改日期 - 3天
'刪除小於3天前的檔案
modifiedDate2 = modifiedDate1 - 3
'WScript.Echo "最近日期2: " & modifiedDate2
For Each File In dstFolder.Files
'WScript.Echo File.Name
'WScript.Echo "該檔最後修改日期: " & FSO.GetFile(File).DateLastModified
'判斷日期
if ((File.DateLastModified <= modifiedDate2)) Then
'WScript.Echo "符合日期的檔案: " & File
File.delete(true)
End If
Next

' 如果遇到子目錄,也要進去檢查並刪除
For Each subFolder in dstFolder.subFolders
if ((subfolder.DateLastModified <= modifiedDate2)) Then
subfolder.delete(true)
End IF
Next

'WScript.Echo "處理完成"
Set FSO = Nothing
Set dstFolder = Nothing

***第一次回答時,看錯以為只是刪除3天前檔案...
***後來才發現是只留最近3天...汗

4
hector958
iT邦研究生 2 級 ‧ 2013-04-23 14:35:23

你說是備份問題,那麼用WIN7/SERVER2008內建的ROBOCOPY指令,可以參數:
/MAXAGE:n :: 檔案期限上限 - 排除 n 日/日期之前的檔案。
/MINAGE:n :: 檔案期限下限 - 排除 n 日/日期之後的檔案。
/MAXLAD:n :: 上次存取日期上限 -排除自 n 日後未使用的檔案。
/MINLAD:n :: 上次存取日期下限 - 排除自 n 日後使用的檔案。
(如果 n < 1900 則 n = n 日,否則 n = YYYYMMDD 日期)。

實際做法這樣:
例從D槽TESTS資料夾備份到D槽TESTD資料夾但是排除最新三天的,並且留下紀錄檔。
寫一批次檔內容如下:

&lt;pre class="c" name="code">@robocopy D:\tests d:\testd /S /MOVE /MINAGE:3 /V /FP /TS /log+:d:\testd\bklog.log

每天排程執行批次檔即可。LOG檔部分就看個人需要囉。
詳細ROBOCOPY指令請在命令提示字元下打ROBOCOPY /?就知道了。

hon2006 iT邦大師 1 級 ‧ 2013-04-23 15:14:50 檢舉

有一種狀況是備份檔太多
硬碟空間會不夠用
所以需要寫一個批次來刪檔案
robocopy 可以配合 forfiles 來使用
但是應該沒有人會用 robocopy 來刪檔案

hector958 iT邦研究生 2 級 ‧ 2013-04-23 17:01:23 檢舉

畢竟問題是"備份"而不是"刪除"。
所以怎麼刪除與管理備份下來的東西就不解釋了。

我要發表回答

立即登入回答