(Using Windows 2000 and 2003 Server)
We use forfiles.exe to delete backup .zip files older than n days, and it works great (command is a bit like below)
forfiles -p"C:\Backup" -m"*.zip" -c"cmd /c if @ISDIR==FALSE del \"@PATH\@FILE\"" -d-5
If a .zip file fails to be created, I'd like to ensure that we don't end up with 0 .zip files in the backup after 5 days. Therefore, the command needs to be:
"delete anything older than 5 days, but ALWAYS keep the most recent 5 files, EVEN if they themselves are older than 5 days"
We can use forfiles.exe or another solution (although anything that is a slick one-liner is ALWAYS preferable to a script file).
Thanks!
FOR /F "skip=5 delims=" %%G IN ('dir /b /O-D /A-D') DO del "%%G"
Will delete all files except the 5 newest ones. I couldn't find a one-liner to keep all files newer than 5 days so for that you might have to use some more complicated logic.
/b
Lists only file names without extra info
/O-D
Sorts list by reverse date order.
/A-D
Filters to only show non-directory files
skip=5
skips the 5 first lines (5 newest ones).