我写了一个batch file,执行以下操作:
REM @ECHO OFF rem %1 = coid rem %2 = rpg location with ending / rem get the path of this cmd script SET SUBDIR=%~dp0 SET BKUPDIR=%SUBDIR%BACKUPS\ SET LOGFILE=%BKUPDIR%backup.log ECHO ************************************************* >>%LOGFILE% ECHO STARTING BACKUP FOR %1 AT %2 >>%LOGFILE% FOR /f "skip=1" %%x in ('wmic os get localdatetime') DO IF NOT defined mydate SET mydate=%%x SET filedate=%mydate:~0,14% SET fullname=%BKUPDIR%%1_%FILEDATE%.ZIP ECHO BKUPDIR: %BKUPDIR% >>%LOGFILE% ECHO mydate: %mydate% >>%LOGFILE% ECHO filedate: %filedate% >>%LOGFILE% ECHO fullname: %fullname% >>%LOGFILE% ECHO SUBDIR: %SUBDIR% >>%LOGFILE% rem lets make sure the backup directory exists before starting IF NOT EXIST %BKUPDIR% MD %BKUPDIR% >>%LOGFILE% %SUBDIR%7z a -tzip %fullname% %2%1*.d IF ERRORLEVEL 255 ECHO user_stopped_the_process >>%LOGFILE% IF ERRORLEVEL 8 ECHO not_enough_memory >>%LOGFILE% IF ERRORLEVEL 7 ECHO command_line_error >>%LOGFILE% IF ERRORLEVEL 2 ECHO fatal_error >>%LOGFILE% IF ERRORLEVEL 1 ECHO ok_warnings >>%LOGFILE% IF ERRORLEVEL 0 GOTO END IF EXIST %fullname% DEL %fullname% :END ECHO FINISHING BACKUP FOR %1 >>%LOGFILE% ECHO ************************************************* >>%LOGFILE% set mydate=
我将文件保存为%1
和创build文件的date/时间:
SSS_20130110133304.ZIP SSS_20130110133336.ZIP
我在任务调度程序中运行这个每天晚上运行。
我想保持在目录中有太多的zip文件,所以我想保留最后30个zip文件存在。
我被困在这一点上。 我如何保留最新的30个压缩文件,这样我就不会收到一个压缩文件的垃圾文件了?
这将从最新到最旧(按创建日期)列出.zip文件,跳过前30个文件。
for /f "skip=30 delims=" %%A in ('dir /a:-d /b /o:-d /t:c *.zip ^2^>nul') do if exist "%%~fA" echo "%%~fA"
当你想要实际删除文件时,只要将echo
改为del
就可以了。 :)
只关注这个问题 – 如何保留最近的30个文件,并删除其余的文件:
您可以使用正确的排序来执行dir > clean.lst
,以使最新的文件位于clean.lst
的开头。 然后,您可以使用for
命令跳过文件中的前30行,并删除第30个文件后列出的文件。
考虑这个测试案例:
C:>md xyz C:>cd xyz c:\xyz>copy con genfiles.bat @echo off set _i=1 :loop if %_i%==100 goto :EOF echo.>%_i%.txt set /a _i+=1 goto loop ^Z 1 file(s) copied. c:\xyz>genfiles c:\xyz>del genfiles.bat
现在在XYZ文件夹中有99个文本文件。
你可以删除所有,但最近30这样的:
C:\xyz>dir /b /od *.txt > clean.lst C:\xyz>for /f "skip=30 delims=" %i in (clean.lst) do del "%i" C:\xyz>del clean.lst
一个dir
只显示文本文件70.txt – 99.txt保留,其余的已被删除。
对于你的批处理文件,我认为它看起来像这样:
cd /d %BKUPDIR% dir /b /od *.zip > clean.lst for /f "skip=30 delims=" %%i in (clean.lst) do del "%%i" del clean.lst