-1

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

На данный момент я делаю это вручную, хотя, я надеюсь, что эта задача может быть автоматизирована?

Что я точно хочу, у меня есть каталог, который содержит это:

 B:\>dir
 Volume in drive B is BACKUP
 Volume Serial Number is ****-****

 Directory of B:\

2015-03-04  13:04    <DIR>          MEMORYCRASHDUMPS
2015-03-02  23:59        20 484 150 [20150302235959.082]-Logs.rar
2015-03-03  00:00    <DIR>          Logs
2015-03-01  17:59        67 365 888 [20150301180000.085]-users.sqlite3
2015-03-01  22:50        67 480 576 [20150301230000.368]-users.sqlite3
2015-03-02  00:32        67 480 576 [20150302030000.378]-users.sqlite3
2015-03-02  06:22        67 503 104 [20150302080000.352]-users.sqlite3
2015-03-02  12:59        67 605 504 [20150302130000.084]-users.sqlite3
2015-03-02  17:59        67 740 672 [20150302180000.090]-users.sqlite3
2015-03-02  22:59        67 921 920 [20150302230000.418]-users.sqlite3
2015-03-03  02:58        67 960 832 [20150303030000.088]-users.sqlite3
2015-03-03  07:53        67 966 976 [20150303080000.456]-users.sqlite3
2015-03-03  12:59        68 013 056 [20150303130000.082]-users.sqlite3
2015-03-03  17:59        68 153 344 [20150303180000.081]-users.sqlite3
2015-03-03  22:54        68 339 712 [20150303230000.352]-users.sqlite3
2015-03-04  01:40        68 350 976 [20150304030000.090]-users.sqlite3
2015-03-04  07:51        68 367 360 [20150304080000.358]-users.sqlite3
2015-03-04  12:53        68 452 352 [20150304130000.085]-users.sqlite3
2015-03-04  17:58        68 718 592 [20150304180000.083]-users.sqlite3

Я хочу удалить все ./*-users.sqlite3 , кроме самого нового (Бонус: кроме N самых новых).

Есть ли удобная встроенная команда windows для этого?

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

1 ответ1

3

Просто - обработать список каталогов, отсортированный по дате по убыванию через FOR /F, и пропустить первые N строк. Ваши имена файлов уже содержат метку времени, которая сортирует их в хронологическом порядке, поэтому вы можете сортировать по имени.

Следующее сохранит 3 самых последних файла. Просто измените значение SKIP по мере необходимости.

for /f "skip=3 delims=" %F in ('dir /b /a-d /o-n "[*]-users.sqlite3"') do @del "%F"

Вы можете поместить вышеупомянутое в пакетный скрипт и параметризировать значение пропуска.

purgeLog.bat

@echo off
pushd b:\
for /f "skip=%1 delims=" %%F in ('dir /b /a-d /o-n "[*]-users.sqlite3"') do del "%%F"
popd

Чтобы сохранить 2 последних журнала, вы должны использовать:

purgeLog 2

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .