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

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

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

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


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

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


Изменения
Автор: finderhd
Дата: 12-02-2020
Доброго времени суток!

Имеется каталог с большим количеством папок, подпапок и файлов.

Структура следующая:

Folder_main\YYYYMMDD\Folder1\
далее подкаталоги
FolderXXX\1.dat
FolderYYY\1.dat
FolderZZZ\1.dat

Folder_main\YYYYMMDD\Folder2\
далее подкаталоги
FolderXXX\1.dat
FolderYYY\1.dat
FolderZZZ\1.dat

Folder_main - корневая, главная папка

... и т.д.

может доходить до сотней подкаталогов типа FolderXXX, а соответственно и файлов в каждой из подпапок.
Каждый файл занимает от нескольких байт, то нескольких килобайт (не более 10kb, где-то). Но их количество (как папок так и соответственно, файлов) очень большое, несколько миллионов. Почти за 10 лет. Каталог ежедневно, в одно определенное время, пополняется по принципу - новая папка - новая подпапка - новый файл.
Нужно удалить все старые папки вместе с файлами, не трогая последние три.

Пытался сделать это через Forfiles, но команда удаляет только файлы. Пытался добавить rmdir /s /q но бесполезно, выдает в ошибку о том, что путь не найден и типа того.

FORFILES /p D:\Folder_main\ /s /m *dat* /d -2000 /c "CMD /c del /Q @FILE"

2000 это я указал, чтобы не сразу весь объем...

Думал про вариант с RD, заранее скопировав три главных последних каталога (YYYYMMDD), но т.к. файлов и подпапок очень много, то такой вариант подойдет лишь разово. Да и неизвестно сколько по времени он будет удалять, боюсь, всю память сожрет. А нужно этот процесс поставить на поток, чтобы ежедневно удалял файлы и каталоги за минусом в три дня. Также, не хотелось бы грузить сервер во время удаления, поэтому предполагается удаление такого большого количества файлов и папок(подпапок) частями.

Можно конечно просто запустить в планировщик батник в выходные, и за несколько недель почистить, а папки постепенно удалить вручную, через тот же total, или удалить через rd, как я упомянул выше, т.к. в принципе последние три дня они не критичны.

Подскажите плз, кто сталкивался с подобными задачами, какое лучше решение применить в данном случае?

Отправлено: 11:19, 12-02-2020

 

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


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

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


Цитата DJ Mogarych:
Зачем тогда вся эта куча лишней информации про вложенные папки и какие-то файлы?
Ещё раз - есть D:\Reports\Folder_main\, в которой есть вложенные папки. Надо грохнуть все эти вложенные папки со всем содержимым, за исключением тех, которые были созданы за последние 3 дня, верно? »
Пожалуй я сам намутил много лишней инфы. Просто хотел, чтобы подробнее было. Прошу меня извинить, но такой уж я педантичный по натуре

Да, всё именно так, как вы сказали. Нужно грохнуть все вложенные папки, чтобы оставились только за последние три дня. Но доп. услорвия про то, что таких файлов и папок очень много, и нужно максимально снизить нагрузку на сервер при выполнении батника - остаются в силе. Файлы, не смотря на то, что небольшие, занимают очень много места, которое может исчисляться десятками гигабайт.
PS. С PowerShell вообще не знаком.

Отправлено: 16:14, 14-02-2020 | #21



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

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


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

fascinating rhythm


Moderator


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

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


"батник"
Код: Выделить весь код
powershell -command "dir D:\Reports\Folder_main -Directory |sort creationtime |select -SkipLast 3 |del -Recurse -Force"
Нагрузка будет только на дисковую подсистему.

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


Отправлено: 16:24, 14-02-2020 | #22


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


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

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


Цитата megaloman:
finderhd, Да запустите уж наконец мой скрипт! Я изнываю от любопытства! Мне прежде всего интересно время. »
Ок, давайте запущу и понаблюдаю за 5 минут, сколько было и сколько удалится. )
За отсчет будет взята папка за такой год: [20110615]. Все папки вида YYYYMMDD по размеру и количеству подпапок и файлов примерно одинаковые. Количество папок YYYYMMDD примерно 2185 (точно не успел увидеть, т.к. батник уже запустил). Так мы посчитаем среднее значение. По результатам, отпишусь.

Итак, запустил Ваш первый батник (вот этот: http://forum.oszone.net/post-2909428-8.html)

Параметры поставил такие:

Set /A Skip=3
Set /A MaxCount=365

Было каталогов вида YYYYMMDD: 2185, через 5 минут работы батника стало: 1818

Изначальная папка была [20110615], после 5 минут работы батника: [20121123]. Также забыл здесь заметить, что в выходные папки не создаются, только в будние дни, поэтому даты в названиях папок вида YYYYMMDD могут "скакать".
Итого получаем, 367 папок вида YYYYMMDD за 5 минут. Очень хороший результат!
Так я и не понял, про параметр Set /A MaxCount=365, при условии, что стоит параметр Set /A Skip=3 )

Последний раз редактировалось finderhd, 14-02-2020 в 17:00.


Отправлено: 16:30, 14-02-2020 | #23


Ветеран


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

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


Я бы сделал проще:
  • взял Far Manager;
  • вошёл в искомый каталог на одной панели;
  • создал на том же разделе другой каталог;
  • вошёл в него на другой панели;
  • отспортировал бы каталоги по нужному критерию;
  • выделил бы все искомые каталоги либо по маске, либо по дате;
  • убрал бы из выделения «три последних»;
  • переместил бы все выделенные каталоги с одной панели на другую;
  • посмотрел бы на результат;
  • если всё верно — перешёл бы на ту панель, куда переместил лишние каталоги;
  • выполнил бы в нём «rd /q /s».
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:18, 14-02-2020 | #24


Ветеран


Contributor


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

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


Цитата:
Так я и не понял, про параметр Set /A MaxCount=365, при условии, что стоит параметр Set /A Skip=3 )
Вы меня не читаете.
Вам надо оставить 3 папки (дня). Можно, естественно, поставить иное кол-ао папок.
Set /A Skip=3
Так как непонятно было, насколько быстро удаляются папки (Вы их собирались удалять чуть ли не месяц), сделал Вам вариант, какое максимальное количество папок за один запуск батник удалит. Я от фонаря поставил 365, то есть год.
Set /A MaxCount=365
Можно поставить значение, равное или больше количества имеющихся папок. Тогда батник удалит все, за исключением 3 последних.
Судя по Вашему отзыву, надо поставить большое значение, и убить все старье за раз.
Батнику глубоко безразлично, когда папки создаются или не создаются, скачут даты или ползают. Останутся 3 последние папки с максимальными значениями даты в имени.

Цитата Iska:
Я бы сделал проще:
Совершенно верно. Один недостаток - в планировщик такое не вставишь.

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


Последний раз редактировалось megaloman, 14-02-2020 в 18:08.


Отправлено: 17:43, 14-02-2020 | #25


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


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

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


Цитата megaloman:
Можно поставить значение, равное или больше количества имеющихся папок. Тогда батник удалит все, за исключением 3 последних.
Судя по Вашему отзыву, надо поставить большое значение, и убить все старье за раз.
Батнику глубоко безразлично, когда папки создаются или не создаются, скачут даты или ползают. Останутся 3 последние папки с максимальными значениями даты в имени. »
я уже понял, прошу прощения. Так и сделаю. Но высплыла одна проблемка - если запускать батник через планировщик (проверяю на тесте - там, три папки за последние дни и две старые), то он запускается, читстит всё, но не останавливается. Приходится вырубать его руками - процесс висит как Runing, и в History видно что планировщик не остановился. Также подскажите плз. как сделать так, чтобы при запуске батника из планировщика, запускалось окошко? Echo on не помогает. При Forfiles, моем первом батнике всё отрабатывает корректно, правда окошко на нем тоже не смог заставить отображаться.

Отправлено: 17:56, 14-02-2020 | #26


Ветеран


Contributor


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

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


Цитата:
читстит всё, но не останавливается. Приходится вырубать его руками.
В смысле? Запрос нажать на клавишу? Уберите pause или закомментируйте ее:
Rem pause
Цитата:
чтобы при запуске батника из планировщика, запускалось окошко? Echo on не помогает.
A что Вы хотите видеть?

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


Отправлено: 18:04, 14-02-2020 | #27


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


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

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


Вобщем, ситуация такая - батник запускал руками пару раз и было нормально, но потом после обработки предыдущих, запустил еще один раз и он почти сожрал всю свободную оперативку (как я и опасался). Видимо как-то "накопительно" подействовало. Хотя первые два запуска были безболезненны. Пришлось почистить память через RamMap, а иначе бы сервер упал. Осталось 1080 папок грохнуть и поставить на поток. Вот только планировщик не хочет останавливать батник после обработки, так и висит в состоянии "Runing"

Цитата megaloman:
A что Вы хотите видеть?
»
уже ничего, буду частями удалять указав меньшее количество дней )

Отправлено: 18:39, 14-02-2020 | #28


Ветеран


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

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


Цитата megaloman:
Один недостаток - в планировщик такое не вставишь. »
Я не дописал — это для первоначального удаления. Когда «надо удалить миллион папок и файлов». Однократное действие.

Отправлено: 07:52, 15-02-2020 | #29


Ветеран


Contributor


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

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


Iska, У Вас есть соображения по этому поводу?
Цитата finderhd:
Вобщем, ситуация такая - батник запускал руками пару раз и было нормально, но потом после обработки предыдущих, запустил еще один раз и он почти сожрал всю свободную оперативку (как я и опасался). »

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


Отправлено: 10:23, 15-02-2020 | #30



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Проблема с просмотром большого количества файлов в explorer Pikki-pikki Microsoft Windows 2000/XP 8 30-05-2021 00:24
Система - [решено] проверка целостности большого количества файлов daneeall Программное обеспечение Windows 7 08-02-2013 16:25
Система - Подскажите программу для копирования / перемещения большого количества мелких файлов kiripanda Программное обеспечение Windows 13 10-08-2010 21:00
Интерфейс - [решено] Переименование большого количества файлов 7human7 Microsoft Windows 2000/XP 7 22-11-2008 09:48
Flash - Проблема копирования большого количества файлов в корневой каталог флешки SANIOK_AV Накопители (SSD, HDD, USB Flash) 2 05-09-2008 11:43




 
Переход