【发布时间】:2015-02-11 23:31:17
【问题描述】:
我正在编写一个简单的 .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命令的作用。为什么要这样写? -
我以为我需要按日期正确排序所有文件夹,但现在我想起来,可能不是这样。
-
事实证明确实如此,但我最初的做法有点不对劲。
标签: batch-file cmd