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

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

Ответить
Настройки темы
CMD/BAT - Удаление самых старых файлов в папке если их вес превысил 200 гб

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


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

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


Изменения
Автор: Lande
Дата: 11-06-2021
Здравствуйте!
Помогите со скриптом, который будет удалять самые старые файлы и папки по директории, если их общий вес превысил 200 гб, так же он должен останавливаться удалять файлы когда общий вес достиг 200 гб и меньше.
Буду признателен за помощь!

Отправлено: 03:10, 11-06-2021

 

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

fascinating rhythm


Moderator


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

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


powershell
Код: Выделить весь код
$folder = "D:\folder"
$currentSize = (dir "$folder" -file -Recurse -OutVariable files |measure -Sum length).sum
$targetSize = 200 * 1GB

if ($currentSize -gt $targetSize) {
$diff = $currentSize - $targetSize
$files = $files |sort lastwritetime
$c = 0
    do {
    $toDel = $toDel + ($files[$c]).length
    $c++
    } until ($toDel -gt $diff)

$files |select -First $c |del
dir "$folder" -Directory -Recurse |? {(dir "$($_.fullname)").count -eq 0} |del
}

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Последний раз редактировалось DJ Mogarych, 11-06-2021 в 09:14.

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

Отправлено: 09:09, 11-06-2021 | #2



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

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


Ветеран


Contributor


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

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


Изображения
Тип файла: png 20210613_DJ Mogarych.ps1.png
(124.3 Kb, 9 просмотров)

DJ Mogarych, в какой версии PS работает Ваш код?

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


Отправлено: 16:26, 13-06-2021 | #3


Ветеран


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

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


в 7.1.3 работает четко, но выбивает
Код: Выделить весь код
Line |
  16 |  … der" -Directory -Recurse |? {(dir "$($_.fullname)").count -eq 0} |del
     |                                                                      ~~~
     | Directory C:\A\WindowsPowerShell\Modules\WindowsPSModulePath\1.0.0 cannot be
     | removed because it is not empty.
самОй работе не мешает

Отправлено: 17:08, 13-06-2021 | #4


Ветеран


Contributor


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

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


Изображения
Тип файла: png 20210613_DJ_Mogarych.ps1-7.png
(38.8 Kb, 6 просмотров)

alpap, У меня хуже.

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


Отправлено: 17:29, 13-06-2021 | #5


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

fascinating rhythm


Moderator


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

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


megaloman, 5.1. Но у вас ругается на права.

alpap, вот это странно, т. к. проверяет же на наличие объектов.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 19:50, 13-06-2021 | #6


Забанен


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

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


Цитата DJ Mogarych:
вот это странно, т. к. проверяет же на наличие объектов.
Ничего странного: выбирается последний элемент в иерархии. По идее нужно "раскручивать" вложенность, либо сделать удаление последовательным (принцип "изнутри наружу"). Для наглядности принцип "раскручивания":
Код: Выделить весь код
(ls X:\Path -r -di|sort FullName -de).ForEach{if (!(ls $_.FullName).Count) {ri $_.FullName -fo}}
Иными словами, нужно отсортировать в порядке вложенности: от наиболее дальнего к корню.

Последний раз редактировалось greg zakharov, 13-06-2021 в 20:47.

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

Отправлено: 20:17, 13-06-2021 | #7


Ветеран


Contributor


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

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


DJ Mogarych,
Цитата:
5.1. Но у вас ругается на права.
я наваял решение задачи на vbs, оно длинное и медленное (не привожу, если кто-то запросит, размещу), но на права не ругается. Что-то в консерватории не то. Возможно, из-за скрытых ини-файлов.

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


Отправлено: 21:06, 13-06-2021 | #8


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

fascinating rhythm


Moderator


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

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


Может быть, надо добавить к del какое-то сочетание ключей
Код: Выделить весь код
-Recurse -Force -Confirm:$false
Не знаю, нужно разбираться в каждом отдельном случае. Я тестировал на обычных файлах в каталоге Downloads.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 20:44, 14-06-2021 | #9


Ветеран


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

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


предупреждение выдает если попадаются системные и скрытые файлы и еще переспрашивает перед этим, точно удалять или нет.

Отправлено: 23:13, 14-06-2021 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Удаление старых файлов/папок если их кол-во больше n greenOwl Скриптовые языки администрирования Windows 35 14-01-2023 08:34
CMD/BAT - Удаление старых бэкапов по маске, оставляя нужное их количество. Slavyan_d Скриптовые языки администрирования Windows 3 25-12-2019 22:07
CMD/BAT - Удаления старых файлов по ftp в папке и её подпаках lamtrot Скриптовые языки администрирования Windows 2 26-02-2016 11:04
CMD/BAT - [решено] Удаление старых файлов по дате и имени, если их больше n NinjaScript Скриптовые языки администрирования Windows 2 04-03-2015 14:27
CMD/BAT - Удаление старых файлов по имени файлов Bиктор Скриптовые языки администрирования Windows 1 19-04-2010 03:37




 
Переход