我在批处理文件中有以下内容:
: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个最新的备份。
任何人都知道我会怎么做?我没有写过这个,因为我不熟悉批处理文件。
答案 0 :(得分:3)
在按上次修改日期排序后,您可以使用FOR /F SKIP
忽略最近修改的最近10个条目:
for /f "skip=10 eol=: delims=" %%F in ('dir /b /o-d *.zip') do @del "%%F"
答案 1 :(得分:1)
您可以使用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%