Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Удалить все файлы кроме последнего за каждый месяц

Ответить
Настройки темы
CMD/BAT - Удалить все файлы кроме последнего за каждый месяц

Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброго времени суток!
Нужно удалить все файлы кроме последнего за каждый месяц.
Есть список файлов вида
Код: Выделить весь код
file_2021_10_20.zip
file_2021_10_21.zip
file_2021_10_22.zip
file_2021_10_23.zip
file_2021_10_24.zip
file_2021_10_25.zip
file_2021_10_26.zip
file_2021_10_27.zip
file_2021_10_28.zip
file_2021_10_29.zip
file_2021_10_30.zip
file_2021_10_31.zip
file_2021_11_01.zip
file_2021_11_02.zip
file_2021_11_03.zip
file_2021_11_04.zip
file_2021_11_05.zip
file_2021_11_06.zip
file_2021_11_07.zip
file_2021_11_08.zip
file_2021_11_09.zip
file_2021_11_10.zip
file_2021_11_11.zip
file_2021_11_12.zip
file_2021_11_13.zip
file_2021_11_14.zip
file_2021_11_15.zip
file_2021_11_16.zip
file_2021_11_17.zip
file_2021_11_18.zip
file_2021_11_19.zip
file_2021_11_20.zip
file_2021_11_21.zip
file_2021_11_22.zip
file_2021_11_23.zip
file_2021_11_24.zip
file_2021_11_25.zip
file_2021_11_26.zip
file_2021_11_27.zip
file_2021_11_28.zip
file_2021_11_29.zip
file_2021_11_30.zip
file_2021_12_01.zip
file_2021_12_02.zip
file_2021_12_03.zip
file_2021_12_04.zip
file_2021_12_05.zip
file_2021_12_06.zip
и.т.д. за 1 год. Нужно удалить все кроме
Код: Выделить весь код
file_2021_10_31.zip
file_2021_11_30.zip
ориентируясь на дату

Отправлено: 13:06, 14-01-2022

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 5795
Благодарности: 1189

Профиль | Отправить PM | Цитировать


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}"

-------
Скачать ffmpeg для Windows: https://www.gyan.dev/ffmpeg/builds/


Последний раз редактировалось DJ Mogarych, 14-01-2022 в 14:30. Причина: чтобы не затирало последний месяц

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:55, 14-01-2022 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо! То что нужно!
Возможно так лучше? Чтобы привязываться к дате независимо от имени файла.
Код: Выделить весь код
dir |group {$_.LastWriteTime.ToString("MM")} |% {$_.group |sort LastWriteTime |select -SkipLast 1|del}

Отправлено: 15:52, 14-01-2022 | #3


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 5795
Благодарности: 1189

Профиль | Отправить PM | Цитировать


Если группировать только по месяцу, а файлы будут за несколько лет, то останется только один файл за последний год этого месяца.

К тому же, вы убрали фильтр последней группы - это приведёт к тому, что будут затираться и файлы текущего месяца.

Что касается сортировки по времени - это можно, но в именах файлов уже есть дата, дело вкуса.

-------
Скачать ffmpeg для Windows: https://www.gyan.dev/ffmpeg/builds/

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:14, 14-01-2022 | #4


Ветеран


Contributor


Сообщения: 2442
Благодарности: 1533

Профиль | Отправить PM | Цитировать


CMD для 2000 ... 2050 года
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=Z:\Box_In"
	Set "Prefix=Имя файла эх ма тру ля ля_"
	Set "Ext=.Zip"

	FOR /L %%y IN (2000,1,2050) DO If Exist "%BoxIn%\%Prefix%%%y_*%Ext%" (
		For %%m In (01 02 03 04 05 06 07 08 09 10 11 12) Do (
			FOR /F "usebackq skip=1 delims=" %%f In (`2^>nul Call Dir /B /A:-D /O:-N "%BoxIn%\%Prefix%%%y_%%m_??%Ext%"`) DO (
				Del "%BoxIn%\%%f"
			)
		)
	)
pause
Exit /B

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 16-01-2022 в 17:17.


Отправлено: 17:10, 16-01-2022 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Удалить все файлы кроме последнего за каждый месяц

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Удалить все файлы в папке кроме последнего (новейшего по дате) myp3ujlka Скриптовые языки администрирования Windows 4 03-12-2021 02:32
CMD/BAT - [решено] Удалить все файлы кроме kas1m Скриптовые языки администрирования Windows 20 03-08-2020 22:03
CMD/BAT - Удалить все папки и файлы кроме определенных 2 папок и 2 файлов komilfo Скриптовые языки администрирования Windows 2 18-01-2018 09:08
CMD/BAT - Удалить из папки все файлы с расширением .txt, кроме одного kardinalmax Скриптовые языки администрирования Windows 13 22-10-2015 12:21
CMD/BAT - [решено] Удалить все файлы из папки кроме нужных Sirimika Скриптовые языки администрирования Windows 16 12-11-2010 10:33




 
Переход