我在写一个简单的.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