刪除指定目錄下,所有在某個指定分鐘以前的文件,可以用來清理經常生成很多文件的目錄,但又需要保留最新的一部分文件
支持拖放目錄到界面
能夠記憶設置,下次啟動后不用重新設置,可以直接開始
應用場景比如:游戲定時存檔,日志目錄、監控文件目錄等
關于這個刪除后備份,我的需求是這樣,如果你要的是刪除前備份,可以把_del()函數里的_bak()調用放到最前面
不多廢話,直接上代碼
SetWorkingDir %A_ScriptDir%SplitPath, A_ScriptName,,,,IniFile
IniFile = %IniFile%.iniGui New, -0x10000 -0x30000 ;無最小化和最大壞按鈕
Gui Font, s9, Segoe UIGui Add, Text, x10 y15 w34 h20 +0x200, 目錄:
Gui Add, Edit, vEdtFolder gOnEdtFolderChange x64 y14 w299 h21Gui Add, Text, x10 y51 w48 h23 +0x200, 分鐘前:
Gui Add, Edit, vEdtMin gOnEdtMinChange x63 y51 w26 h21Gui Add, CheckBox, vChkBak gOnChkBakChange x10 y88 w85 h23, 刪除后備份Gui Add, Text, x115 y50 w98 h23 +0x200, 檢測間隔[分鐘]:
Gui Add, Edit, vEdtInterval gOnEdtIntervalChange x216 y50 w26 h21Gui Add, Edit, vEdtZipFile gOnEdtZipFileChange x100 y88 w265 h21Gui Add, Button, gOnBtnStart x147 y130 w72 h23, 開始監視;讀取INI賦值
IniRead, Folder, % IniFile, Base, Folder
if (Folder = "" || Folder == "ERROR")Folder = 拖放文件夾到這里
IniRead, Min, % IniFile, Base, Min
if (Min = "" || Min == "ERROR")Min = 30
IniRead, Interval, % IniFile, Base, Interval
if (Interval = "" || Interval == "ERROR")Interval = 5
IniRead, IsBackup, % IniFile, Base, IsBackup
if (IsBackup = "" || IsBackup == "ERROR")IsBackup = 0
IniRead, ZipFile, % IniFile, Base, ZipFile
if (ZipFile = "" || ZipFile == "ERROR")ZipFile = 備份文件路徑 [擴展名:.zip]
GuiControl,, EdtFolder, % Folder
GuiControl,, EdtMin, % Min
GuiControl,, EdtInterval, % Interval
GuiControl,, ChkBak, % IsBackup
GuiControl,, EdtZipFile, % ZipFileGui Show, w371 h169, 刪除目錄下指定分鐘以前的文件
ReturnOnEdtFolderChange:
global Folder
GuiControlGet, Folder, , EdtFolder
;MsgBox % Folder
IniWrite % Folder, % IniFile, Base, Folder
ReturnOnEdtMinChange:
global Min
GuiControlGet, Min, , EdtMin
IniWrite % Min, % IniFile, Base, Min
ReturnOnEdtIntervalChange:
global Interval
GuiControlGet, Interval, , EdtInterval
IniWrite % Interval, % IniFile, Base, Interval
ReturnOnChkBakChange:
global IsBackup
GuiControlGet, IsBackup, , ChkBak
IniWrite % IsBackup, % IniFile, Base, IsBackup
ReturnOnEdtZipFileChange:
global ZipFile
GuiControlGet, ZipFile, , EdtZipFile
IniWrite % ZipFile, % IniFile, Base, ZipFile
ReturnGuiDropFiles:
Loop, Parse, A_GuiEvent, `n
{global IniFileFirstFile = %A_LoopField%FileGetAttrib, Attributes, % FirstFileIfInString, Attributes, D ;是目錄;MsgBox This is a directory.GuiControl,, EdtFolder, % FirstFile ;自動調用onChangebreak
}
ReturnOnBtnStart:
global Folder
if !FileExist(Folder)
{MsgBox 目錄不存在!return
}Gui, Hideglobal Interval
_del()
SetTimer _del, % Interval * 60 * 1000
ReturnGuiEscape:
GuiClose:ExitApp_del(){global Folder ;必須引用global MinLoop %Folder%\*{;計算文件的最后修改時間距離當前時間的分鐘數TimeNow := A_NowEnvSub TimeNow, A_LoopFileTimeModified, Minutes;如果文件的最后修改時間超過了指定的分鐘數,就刪除該文件if (TimeNow > Min){;MsgBox %A_LoopFileFullPath%;盡可能刪除到回收站,否則使用FileDeleteFileRecycle %A_LoopFileFullPath%}}_bak()
}_bak()
{global Folderglobal ZipFileIfExist %ZipFile%FileRecycle %ZipFile%;雙引號路徑可以處理空格Run 7z.exe a -tzip -r "%ZipFile%" "%Folder%",,Hide
}