Любой язык - [решено] Скрипт для удаления повторяющихся папок

Аватара пользователя
DJ Mogarych

Re: Любой язык - [решено] Скрипт для удаления повторяющихся папок

Сообщение DJ Mogarych »

Выше добавил вывод объёма под каждой папкой в мегабайтах.
Аватара пользователя
asaut

Re: Любой язык - [решено] Скрипт для удаления повторяющихся папок

Сообщение asaut »

Цитата DJ Mogarych:



Выше добавил вывод объёма под каждой папкой в мегабайтах.
Любой язык - [решено] Скрипт для удаления повторяющихся папок




Спасибо! *с пеной у рта*
Аватара пользователя
DJ Mogarych

Re: Любой язык - [решено] Скрипт для удаления повторяющихся папок

Сообщение DJ Mogarych »

Можно сделать ещё интереснее.





Код:

Код: Выделить всё

$report = @()
dir "\\srv\Projects\Work\2021" -Recurse -directory |? name -match '_comp_' |% {
    if (($enum = $_.EnumerateFiles()).extension -eq '.exr') {
        $obj = [pscustomobject]@{
            'Каталог' = $_.fullname
            'РазмерМБ' = ($enum.length |measure -Sum).sum / 1mb
        }
        $report += $obj
    }
}
# Сортировать вывод по колонке размера, начиная с самого большого значения
$report |sort 'РазмерМБ' -Descending |fl
Аватара пользователя
asaut

Re: Любой язык - [решено] Скрипт для удаления повторяющихся папок

Сообщение asaut »

Цитата DJ Mogarych:



Можно сделать ещё интереснее.
Любой язык - [решено] Скрипт для удаления повторяющихся папок




Уже создал табличку и посчитал место занимаемое этим безобразием. Теперь ищу формулу как убрать ненужные версии.

Опять же есть много версий одного проекта нужно оставить только три последние в папке или вообще ничего не делать если их три и менее.
Аватара пользователя
DJ Mogarych

Re: Любой язык - [решено] Скрипт для удаления повторяющихся папок

Сообщение DJ Mogarych »

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

Уберите параметр -WhatIf, чтобы удалялось реально. С ним будет только выводиться информация.



Код:

Код: Выделить всё

$report = @()
dir "\\srv\Projects\Work\2021" -Recurse -directory |? name -match '_comp_' |% {
    if (($enum = $_.EnumerateFiles()).extension -eq '.exr') {
        $obj = [pscustomobject]@{
            'Каталог' = $_.fullname
            'РазмерМБ' = ($enum.length |measure -Sum).sum / 1mb
            'Родитель' = $_.Parent.FullName
        }
        $report += $obj
    }
}
foreach ($parent in ($report.'Родитель' |sort -Unique)) {
$toDel = $report |? 'Родитель' -eq $parent |sort {$_.Каталог -replace '(\d+)$','$1'} |select -SkipLast 3
    if ($toDel) {
        $toDel.каталог |del -Recurse -WhatIf
    }
}
Аватара пользователя
asaut

Re: Любой язык - [решено] Скрипт для удаления повторяющихся папок

Сообщение asaut »

Цитата DJ Mogarych:



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

Уберите параметр -WhatIf, чтобы удалялось реально. С ним будет только выводиться информация.
Любой язык - [решено] Скрипт для удаления повторяющихся папок




Спасибо, тестирую. Это займет какое-то время тк в прошлый раз я нашел пять тысяч папок. Напишу как прошло
Аватара пользователя
asaut

Re: Любой язык - [решено] Скрипт для удаления повторяющихся папок

Сообщение asaut »

Цитата DJ Mogarych:



$report = @()

dir "\\srv\Projects\Work\2021" -Recurse -directory |? name -match '_comp_' |% {

if (($enum = $_.EnumerateFiles()).extension -eq '.exr') {

$obj = [pscustomobject]@{

'Каталог' = $_.fullname

'РазмерМБ' = ($enum.length |measure -Sum).sum / 1mb

'Родитель' = $_.Parent.FullName

}

$report += $obj

}

}

foreach ($parent in ($report.'Родитель' |sort -Unique)) {

$toDel = $report |? 'Родитель' -eq $parent |sort {$_.Каталог -replace '(\d+)$','$1'} |select -SkipLast 3

if ($toDel) {

$toDel.каталог |del -Recurse -WhatIf

}

}
Любой язык - [решено] Скрипт для удаления повторяющихся папок






Все сработало за исключением 'РазмерМБ'. Беглый просмотр показал успешность кода!
Аватара пользователя
DJ Mogarych

Re: Любой язык - [решено] Скрипт для удаления повторяющихся папок

Сообщение DJ Mogarych »

Размер можно получить, если вывести



Код:

Код: Выделить всё

$report |sort 'РазмерМБ' -Descending |fl

Если использовать скрипт только для удаления лишних каталогов, то размер там не используется и строку 'РазмерМБ' внутри $obj можно закомментировать.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»