我在寫一個簡單的.bat備份腳本,並且作爲其中的一部分,我希望在達到設置的最大備份限制時刪除最舊的備份(文件夾)。批處理腳本刪除給定文件夾中最舊的文件夾
現在我有這樣的:
%COUNTER%
是基於目前在存儲備份,並較早在腳本計算目錄備份文件夾的數量。
%MAXBACKUPS%
只是一個用戶指定的數字,如「10」,表示您只想保留最多10個備份版本。
:: Delete the oldest backup, but only if we've exceeded the desired number of backups.
IF %COUNTER% gtr %MAXBACKUPS% (
ECHO More than %MAXBACKUPS% backups exist. Deleting oldest...
FOR /f "delims=" %%a in ('dir "..\Backup\*" /t:c /a:d /o:-d /b') do rd /s /q "..\Backup\%%a"
::Increment the counter down since we've just removed a backup folder.
SET /a COUNTER=%COUNTER%-1
)
我想這個腳本只能在..\Backup
文件夾中刪除一個最古老的文件夾,但因爲它的立場似乎一旦到達備份限制,這顯然是不希望刪除它找到的每一個文件夾行爲。
很好,因爲你在那裏有一個循環調用'rd'每個文件夾的腳本刪除每一個文件夾。這就是'for'命令的作用。你爲什麼這樣寫呢? – HugoRune 2015-02-11 23:36:45
我以爲我需要按日期正確排序所有文件夾,但現在我想到了,可能並非如此。 – Ectropy 2015-02-11 23:38:46
事實證明,情況正是如此,但我原來的做法有點不合適。 – Ectropy 2015-02-12 03:16:18