BATCH在创建新备份文件时删除最旧的备份文件

时间:2016-02-24 21:53:09

标签: batch-file cmd backup

我有一个关于在文件夹获取具有相同扩展名的X文件后删除最旧文件的问题,在这种情况下,所有文件共享共享扩展名*.bak,它们是我的小文件为我的firefox创建它们,它们已经印在标题,创建的日期和时间上,并尽可能地去了。

无论如何,我偶然发现了这个:Batch Script to delete oldest folder in a given folder。而且我正在努力让它来实现我的想法。

问题是我希望批处理使用这一简单的代码行创建一个新文件后,检查哪个文件是最旧的。

copy /y store.json "%DROPBOX%\RES BACKUPS\store.json %date:~-4,4%-%date:~-7,2%-%date:~-10,2%_%time:~0,2%hs-%time:~3,2%min-%time:~6,2%s.bak"

1 个答案:

答案 0 :(得分:3)

您可以使用:

@echo off
for /f "delims=" %%a in ('dir /b /a-d /t:w /o:d "%DROPBOX%\RES BACKUPS\*.bak"') do (
    del "%%a"
    goto :breakLoop
    )
:breakLoop

我建议先使用echo del "%%a"对其进行测试,以确保删除正确的文件。

这是通过获取dir命令的输出来实现的,该命令以裸格式显示所有文件(仅文件名,而不是大小等),首先按最旧文件排序。然后它删除找到的第一个文件,并打破循环。

在超过特定金额时继续删除文件的版本:

@echo off
set "source=%DROPBOX%\RES BACKUPS\*.bak"
set "minFiles=5"
for /f %%A in ('dir "%source%" /a-d-s-h /b ^| find /v /c ""') do if %%A leq %minFiles% goto :eof
:loop
for /f "delims=" %%a in ('dir /b /a-d /t:w /o:d "%source%"') do (
    del "%%a"
    goto :breakLoop
    )
:breakLoop
for /f %%A in ('dir "%source%" /a-d-s-h /b ^| find /v /c ""') do if %%A gtr %minFiles% goto :loop
pause

您可以删除行for /f %%A in ('dir "%source%" /a-d-s-h /b ^| find /v /c ""') do if %%A gtr %minFiles% goto :loop

,使此非循环(但如果超过5,则仍然只删除)