我在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%