![]() |
Удалить все файлы кроме последнего за каждый месяц
Доброго времени суток!
Нужно удалить все файлы кроме последнего за каждый месяц. Есть список файлов вида Код:
file_2021_10_20.zip Код:
file_2021_10_31.zip |
Powershell:
Код:
dir 'D:\temp\del\*.zip' |group {$_ -replace '.*(\d{4}_\d{2}).*','$1'} |sort name |select -SkipLast 1 |% {$_.group |sort name |select -SkipLast 1 |del} Код:
powershell -command "dir 'D:\temp\del\*.zip' |group {$_ -replace '.*(\d{4}_\d{2}).*','$1'} |sort name |select -SkipLast 1 |% {$_.group |sort name |select -SkipLast 1 |del}" |
Спасибо! То что нужно!
Возможно так лучше? Чтобы привязываться к дате независимо от имени файла. Код:
dir |group {$_.LastWriteTime.ToString("MM")} |% {$_.group |sort LastWriteTime |select -SkipLast 1|del} |
Если группировать только по месяцу, а файлы будут за несколько лет, то останется только один файл за последний год этого месяца.
К тому же, вы убрали фильтр последней группы - это приведёт к тому, что будут затираться и файлы текущего месяца. Что касается сортировки по времени - это можно, но в именах файлов уже есть дата, дело вкуса. |
CMD для 2000 ... 2050 года
Код:
@Echo Off |
Как подкорректировать скрипт, чтобы из такого списка
2022-11-26-04-14_11.02.089.ZBF 2022-11-27-04-14_11.02.089.ZBF 2022-11-28-04-14_11.02.089.ZBF .... оставался всегда только один самый новый? |
Powershell
Код:
dir 'D:\temp\logs' |sort name |select -SkipLast 1 |del Код:
powershell -command "dir 'D:\temp\logs' |sort name |select -SkipLast 1 |del" |
Код:
@Echo off |
Время: 23:46. |
Время: 23:46.
© OSzone.net 2001-