我正在寻找一种方法来将最新的 N 个文件保存在一个目录中,删除旧的。
我在一个文件夹(Windows Server)中通过 FTP 获得了每日备份,我想只保留最后 3 个备份。这些备份有 2 个文件(第一个是 .tar.gz,第二个是 MySQL 转储 .sql)。
关键是这些备份可能不会在某些日子出现,所以我不想删除超过 3 天的文件。但是尽可能多地删除文件,只保留最新的 6 个文件(3 天的备份,一次 2 个文件)。
如何用 .bat 做到这一点?
提前致谢
我正在寻找一种方法来将最新的 N 个文件保存在一个目录中,删除旧的。
我在一个文件夹(Windows Server)中通过 FTP 获得了每日备份,我想只保留最后 3 个备份。这些备份有 2 个文件(第一个是 .tar.gz,第二个是 MySQL 转储 .sql)。
关键是这些备份可能不会在某些日子出现,所以我不想删除超过 3 天的文件。但是尽可能多地删除文件,只保留最新的 6 个文件(3 天的备份,一次 2 个文件)。
如何用 .bat 做到这一点?
提前致谢
比 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 dir
或dir /?
从命令提示符获取有关所有选项含义的文档。FOR 命令处理结果。SKIP 选项会跳过前 6 个文件,这些文件恰好是您想要保留的文件,因为它们排在最前面。剩余的文件名被传递给 DEL 命令。在 FOR 上键入help for
或for /?
获取文档 - 它有点像野兽,有很多选择。
尝试这个:
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"