batch-file - 批处理脚本删除给定文件夹中最旧的文件夹

标签 batch-file cmd

我正在编写一个简单的 .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 中最旧的一个文件夹。文件夹,但就目前而言,一旦达到备份限制,它似乎会删除找到的每个文件夹,这显然不是所需的行为。

最佳答案

你离得太近了! :-)

您需要做的就是跳过第一个 %MAXBACKUPS%按日期降序排序的条目。你甚至不需要你的 COUNTER多变的。

:: Preserve only the %MAXBACKUPS% most recent backups.
set "delMsg="
for /f "skip=%MAXBACKUPS% delims=" %%a in (
  'dir "..\Backup\*" /t:c /a:d /o:-d /b'
) do (
  if not defined delMsg (
    set delMsg=1
    echo More than %MAXBACKUPS% found - only the %MAXBACKUPS% most recent folders will be preserved.
  )
  rd /s /q "..\Backup\%%a"
)

关于batch-file - 批处理脚本删除给定文件夹中最旧的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28466638/

相关文章:

windows - 通过批处理文件使用 findstr 删除特定子文件夹

windows - 通过 tf.exe 确定 TFS 工作区的本地路径

python - 尝试设置 Django,但在 cmd 中收到错误

cmd - 通过 RUN 执行命令行后隐藏 CMD 窗口

linux - 如何从 bash 制作批处理脚本

java - 'cmd' 不是内部或外部命令,也不是可运行的程序或批处理文件

java - 用java写入.bat文件

batch-file - 管道输出到删除命令

batch-file - 如何批量更改子文件夹中的文件扩展名

cmd - 在cmd中为特定命令创建别名