2

我正在寻找一种方法来将最新的 N 个文件保存在一个目录中,删除旧的。

我在一个文件夹(Windows Server)中通过 FTP 获得了每日备份,我想只保留最后 3 个备份。这些备份有 2 个文件(第一个是 .tar.gz,第二个是 MySQL 转储 .sql)。

关键是这些备份可能不会在某些日子出现,所以我不想删除超过 3 天的文件。但是尽可能多地删除文件,只保留最新的 6 个文件(3 天的备份,一次 2 个文件)。

如何用 .bat 做到这一点?

提前致谢

4

2 回答 2

6

比 Endoro 的回答更直截了当。这假定 .sql 和 .tar.gz 文件总是成对出现。

for /f "skip=6 eol=: delims=" %%F in ('dir /b /a-d /o-d *.tar.gz *.sql') do del "%%F"

解释:

DIR 命令列出按最后修改时间戳降序排列的文件。键入help dirdir /?从命令提示符获取有关所有选项含义的文档。FOR 命令处理结果。SKIP 选项会跳过前 6 个文件,这些文件恰好是您想要保留的文件,因为它们排在最前面。剩余的文件名被传递给 DEL 命令。在 FOR 上键入help forfor /?获取文档 - 它有点像野兽,有很多选择。

于 2013-07-31T23:12:00.793 回答
1

尝试这个:

for /f "tokens=1*delims=:" %%a in ('dir /b /a-d /o-d *.tar.gz *dump.sql 2^>nul^|findstr /n "^"') do if %%a gtr 6 echo del "%%~b" 
于 2013-07-31T22:59:34.517 回答