Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Удалить все файлы кроме последнего за каждый месяц (http://forum.oszone.net/showthread.php?t=350484)

myp3ujlka 14-01-2022 13:06 2977604

Удалить все файлы кроме последнего за каждый месяц
 
Доброго времени суток!
Нужно удалить все файлы кроме последнего за каждый месяц.
Есть список файлов вида
Код:

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

ориентируясь на дату

DJ Mogarych 14-01-2022 13:55 2977608

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

myp3ujlka 14-01-2022 15:52 2977628

Спасибо! То что нужно!
Возможно так лучше? Чтобы привязываться к дате независимо от имени файла.
Код:

dir |group {$_.LastWriteTime.ToString("MM")} |% {$_.group |sort LastWriteTime |select -SkipLast 1|del}

DJ Mogarych 14-01-2022 16:14 2977630

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

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

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

megaloman 16-01-2022 17:10 2977782

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


mariolast 29-11-2022 02:49 2997560

Как подкорректировать скрипт, чтобы из такого списка
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
....
оставался всегда только один самый новый?

DJ Mogarych 29-11-2022 10:16 2997570

Powershell
Код:

dir 'D:\temp\logs' |sort name |select -SkipLast 1 |del
"Батник"
Код:

powershell -command "dir 'D:\temp\logs' |sort name |select -SkipLast 1 |del"

megaloman 29-11-2022 12:30 2997578

Код:

@Echo off
        Set "BoxIn=Z:\Soft_Arc"
        Set "Mask=20??-??-??-??-??_??.??.???.ZBF"
       
        Pushd "%BoxIn%"|| (Echo Folder "%BoxIn%" not found &Pause &Exit /B 2)
        FOR /F "usebackq skip=1 delims=" %%i In (`2^>nul Dir /B /A:-D /O:-N "%Mask%"`) DO Del "%%i"
Exit /B



Время: 23:46.

Время: 23:46.
© OSzone.net 2001-