Как использовать forfiles (или аналогичные) для удаления файлов старше n дней, но всегда оставляя самые последние n - PullRequest
1 голос
/ 22 апреля 2010

(с использованием Windows 2000 и 2003 Server)

Мы используем forfiles.exe для удаления резервных файлов .zip старше n дней, и это прекрасно работает (команда немного похожа на приведенную ниже)

forfiles -p"C:\Backup" -m"*.zip" -c"cmd /c if @ISDIR==FALSE del \"@PATH\@FILE\"" -d-5

Если не удается создать файл .zip, я хотел бы убедиться, что мы не получим 0 .zip файлов в резервной копии через 5 дней. Следовательно, команда должна быть:

"удалить что-либо старше 5 дней, но ВСЕГДА сохраняйте последние 5 файлов, ДАЖЕ, если они сами старше 5 дней"

Мы можем использовать forfiles.exe или другое решение (хотя все, что является хитрым однострочником, ВСЕГДА предпочтительнее файла сценария).

Спасибо!

Ответы [ 2 ]

4 голосов
/ 03 мая 2010
FOR /F "skip=5 delims=" %%G IN ('dir /b /O-D /A-D') DO del "%%G"

Удалит все файлы, кроме 5 самых новых. Я не смог найти одну строку, чтобы все файлы были обновлены более 5 дней, поэтому вам, возможно, придется использовать более сложную логику.

/b

Перечисляет только имена файлов без дополнительной информации

/O-D

Сортировка списка по дате в обратном порядке.

/A-D

Фильтры для показа только не-каталогов файлов

skip=5

пропускает 5 первых строк (5 самых новых).

0 голосов
/ 12 июня 2019

Этот крошечный скрипт удаляет совпадающие файлы, которые старше 5 дней или, точнее сказать, которые были изменены как минимум 6 дней назад, но всегда сохраняют как минимум 5 самых последних измененных:

rem // Change to the target directory:
pushd "C:\Backup" && (
    rem // Loop through all matching files but skip the 5 most recently modified ones:
    for /F "skip=5 delims= eol=|" %%F in ('
        dir /B /A:-D /O:-D "*.zip"
    ') do (
        rem // Delete the currently iterated file only when modified at least 6 days ago:
        forfiles /P "%%~dpF." /M "%%~nxF" /D -6 /C "cmd /C ECHO del /F /A @PATH" 2> nul
    )
    rem // Restore the original working directory:
    popd
)
...