batch file删除所有,但最新的10个文件

我在batch file中有以下内容:

:REMOLDFILES ECHO Removing files older than 14 days. >>%LOGFILE% cd /d %BKUPDIR% FOR /f "skip=14 delims=" %%A IN ('DIR /a:-d /b /o:-d /t:c %1*.zip ^2^>nul') DO IF EXIST "%%~fA" ECHO "%%~fA" >>%LOGFILE% FOR /f "skip=14 delims=" %%A IN ('DIR /a:-d /b /o:-d /t:c %1*.zip ^2^>nul') DO IF EXIST "%%~fA" DEL "%%~fA" >>%LOGFILE% FOR /f "skip=14 delims=" %%A IN ('DIR /a:-d /b /o:-d /t:c %1*.log ^2^>nul') DO IF EXIST "%%~fA" ECHO "%%~fA" >>%LOGFILE% FOR /f "skip=14 delims=" %%A IN ('DIR /a:-d /b /o:-d /t:c %1*.log ^2^>nul') DO IF EXIST "%%~fA" DEL "%%~fA" >>%LOGFILE% IF [%3]==[Y] GOTO SECONDBACKUPDIR IF [%3]==[y] GOTO SECONDBACKUPDIR GOTO END 

我遇到的问题是,备份没有运行几个星期,最后删除了所有的备份,因为他们已经超过2周。

我需要的是保留最近10次的最新备份。

任何人有一个想法,我会怎么做? 因为我不熟悉batch file,所以我没有写这个。

您可以使用FOR /F SKIP忽略上次修改日期排序后的最近10个最近修改的条目:

 for /f "skip=10 eol=: delims=" %%F in ('dir /b /od *.zip') do @del "%%F" 

您可以使用DIR命令通过修改日期以相反的顺序获取文件列表。 然后,你只要告诉你的FOR循环跳过前10( 注意你的邮政编码显示14 ,但你要求10)条目,所以无论处理被删除。

 REM Update to 14 if needed. SET Keep=10 FOR /F "usebackq tokens=* skip=%Keep% delims=" %%A IN (`DIR *.zip /B /O:-D /A:-D`) DO DEL "%%A">>%LOGFILE% 

由于您不熟悉批处理,您可以通过将DEL替换为ECHO来测试此命令(查看将删除的内容,而不是实际删除的内容)。


编辑

既然你也在处理日志文件,为什么不直接在同一个循环中删除呢?

 REM Update to 14 if needed. SET Keep=10 FOR /F "usebackq tokens=* skip=%Keep% delims=" %%A IN (`DIR *.zip /B /O:-D /A:-D`) DO ( ECHO Processing: %%~nA REM Delete ZIP file. DEL "%%A" REM Delete LOG file. DEL "%%~nA.log" )>>%LOGFILE%