|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление большого количества папок и файлов |
|
CMD/BAT - [решено] Удаление большого количества папок и файлов
|
Новый участник Сообщения: 42 |
Профиль | Отправить PM | Цитировать
Доброго времени суток!
Имеется каталог с большим количеством папок, подпапок и файлов. Структура следующая: 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 |
Старожил Сообщения: 427
|
Профиль | Отправить PM | Цитировать @file - возвращает имя файла.
а вам надо указать @path - возвращает полный путь к файлу. |
Отправлено: 13:00, 12-02-2020 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Цитата Ageron:
Попробовал указать, ничего не изменилось. |
|
Отправлено: 13:42, 12-02-2020 | #3 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Цитата finderhd:
Цитата finderhd:
Folder_main\20200210\ Folder_main\20200205\ Folder_main\20200203\ А предыдущие: Folder_main\20200202\ Folder_main\20200201\ Folder_main\20200128\ Folder_main\20191231\ ....... удалить. @Echo Off
cls
Set "BoxIn=Z:\Box_In\Folder_Main"
Set "Mask=2???????"
Set /A Skip=3
FOR /F "usebackq Skip=%Skip% delims=" %%f IN (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:D /O:-N`) Do Call Echo %%Time%% "%BoxIn%\%%f" &Rd /S /Q "%BoxIn%\%%f"
rem pause
Exit /B 0
Вставил визуальный контроль процесса, если это не надо - уберите выделенное красным цветом. ОцЕните скорость выполнения - если посчитаете, что всё-таки надо процесс разбить - пишите. |
||
------- Последний раз редактировалось megaloman, 14-02-2020 в 14:05. Отправлено: 15:27, 12-02-2020 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
P.S. Первый раз можно и «ручками» удалить . |
||
Отправлено: 01:03, 13-02-2020 | #5 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Iska, в чём смысл? Вижу цель - оставить несколько последних по датам в имени папок. Счюпать каждый файл - никакого смысла.
Если уж очень хочется, то и рекурсия - не оптимум. ИМХО эффективнее сделать dir папок и конвейером на обратную сортировку. Убивать в папке файлы и после удаления файлов удалять папку без /s /q. Но это по времени не знаю на сколько порядков медленнее, чем удалять сразу старые папки. Эх, не хватает оценки, сколько тратится времени на удаление каждого дня. Если принять, что за 10 лет создалось 3600 папок по дням и если каждая папка удаляется 1сек, то это уже 1 час. Кстати, echo в моём коде наверное может хорошо замедлить процесс. |
------- Отправлено: 12:11, 13-02-2020 | #6 |
fascinating rhythm Сообщения: 6491
|
Профиль | Отправить PM | Цитировать finderhd, а не хотите отталкиваться от даты создания файла вместо "трёх последних папок"?
|
------- Отправлено: 16:33, 13-02-2020 | #7 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Вот вариант с ограничением количества удаленных папкодней
@Echo Off cls Set "BoxIn=Z:\Box_In\Folder_Main" Set "Mask=2???????" Set /A Skip=3 Set /A MaxCount=365 FOR /F "usebackq Skip=%Skip% delims=" %%d IN (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:D /O:-N`) Do Set /A MaxDay=%%~nd &GoTo :Begin :Begin Set /A iCount=0 FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:D /O:N`) Do ( If %MaxDay% GEQ %%f ( Rd /S /Q "%BoxIn%\%%f" Call :Counter || GoTo :End ) ) :End rem pause Exit /B 0 :Counter Set /A iCount+=1 If %iCount% EQU %MaxCount% Exit /B 1 Exit /B 0 Set /A Skip=3 -здесь количество дней, которые нужно оставить Set /A MaxCount=365 -здесь количество дней (не более), удаляемых за один запуск батника. Батник можно поместить в планировщик, запускать хоть раз в день, хоть несколько (надо при этом быть уверенным, что предыдущий запуск уже успел отработать). При указанных параметрах и если задание в планировщике запускать раз в сутки, за 10 дней 10 лет Вы убьете и в последующем будут всегда оставаться три последних дня. |
------- Последний раз редактировалось megaloman, 13-02-2020 в 17:51. Отправлено: 17:42, 13-02-2020 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 18:35, 13-02-2020 | #9 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
------- Отправлено: 19:00, 13-02-2020 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - [решено] Проблема с просмотром большого количества файлов в 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 |
|