如何删除除最新匹配模式的文件之外的所有匹配模式的文件(或早于...的文件)?

如何删除除最新匹配模式的文件之外的所有匹配模式的文件(或早于...的文件)?

我有一个正在运行的计划任务/脚本,每 3 小时对文件进行一次快照,但是文件正在增长并且磁盘空间有限,所以每周我都想执行一次清理。

至于现在我手动执行此操作,但是,我希望此任务可以自动化?

我真正想要的是,我有一个包含以下内容的目录:

 B:\>dir
 Volume in drive B is BACKUP
 Volume Serial Number is ****-****

 Directory of B:\

2015-03-04  13:04    <DIR>          MEMORYCRASHDUMPS
2015-03-02  23:59        20 484 150 [20150302235959.082]-Logs.rar
2015-03-03  00:00    <DIR>          Logs
2015-03-01  17:59        67 365 888 [20150301180000.085]-users.sqlite3
2015-03-01  22:50        67 480 576 [20150301230000.368]-users.sqlite3
2015-03-02  00:32        67 480 576 [20150302030000.378]-users.sqlite3
2015-03-02  06:22        67 503 104 [20150302080000.352]-users.sqlite3
2015-03-02  12:59        67 605 504 [20150302130000.084]-users.sqlite3
2015-03-02  17:59        67 740 672 [20150302180000.090]-users.sqlite3
2015-03-02  22:59        67 921 920 [20150302230000.418]-users.sqlite3
2015-03-03  02:58        67 960 832 [20150303030000.088]-users.sqlite3
2015-03-03  07:53        67 966 976 [20150303080000.456]-users.sqlite3
2015-03-03  12:59        68 013 056 [20150303130000.082]-users.sqlite3
2015-03-03  17:59        68 153 344 [20150303180000.081]-users.sqlite3
2015-03-03  22:54        68 339 712 [20150303230000.352]-users.sqlite3
2015-03-04  01:40        68 350 976 [20150304030000.090]-users.sqlite3
2015-03-04  07:51        68 367 360 [20150304080000.358]-users.sqlite3
2015-03-04  12:53        68 452 352 [20150304130000.085]-users.sqlite3
2015-03-04  17:58        68 718 592 [20150304180000.083]-users.sqlite3

我想删除所有内容./*-users.sqlite3,除了最新的一个(奖励:除了最新的 N 个)。

是否有一个方便的内置 Windows 命令来实现这一点?

我确实已经检查了几个问题,虽然它们仅涉及按日期/年龄或模式删除文件,但它们并没有提供排除最新项目(仅限特定文件名)的方法。

答案1

简单 - 通过 FOR /F 处理按日期降序排序的目录列表,并跳过前 N 行。您的文件名已经包含按时间顺序正确排序的时间戳,因此您可以按名称排序。

以下将保留最近的 3 个文件。只需根据需要修改 SKIP 值即可。

for /f "skip=3 delims=" %F in ('dir /b /a-d /o-n "[*]-users.sqlite3"') do @del "%F"

您可以将以上内容放入批处理脚本中,并参数化跳过值。

清除日志程序

@echo off
pushd b:\
for /f "skip=%1 delims=" %%F in ('dir /b /a-d /o-n "[*]-users.sqlite3"') do del "%%F"
popd

要保留最近的 2 条日志,您可以使用:

purgeLog 2

相关内容