CMD/BAT - [решено] Удаление большого количества папок и файлов
-
finderhd
CMD/BAT - [решено] Удаление большого количества папок и файлов
Доброго времени суток!
Имеется каталог с большим количеством папок, подпапок и файлов.
Структура следующая:
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, как я упомянул выше, т.к. в принципе последние три дня они не критичны.
Подскажите плз, кто сталкивался с подобными задачами, какое лучше решение применить в данном случае?
Имеется каталог с большим количеством папок, подпапок и файлов.
Структура следующая:
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, как я упомянул выше, т.к. в принципе последние три дня они не критичны.
Подскажите плз, кто сталкивался с подобными задачами, какое лучше решение применить в данном случае?
-
Ageron
Re: CMD/BAT - [решено] Удаление большого количества папок и файлов
@file - возвращает имя файла.
а вам надо указать
@path - возвращает полный путь к файлу.
а вам надо указать
@path - возвращает полный путь к файлу.
-
alpap
Re: CMD/BAT - [решено] Удаление большого количества папок и файлов
Цитата Ageron:
@file - возвращает имя файла.
а вам надо указать
@path - возвращает полный путь к файлу.
Не совсем понятно, что Вы имели в виду? Поставить в конце команды @path вместо @file ?
Попробовал указать, ничего не изменилось.
@file - возвращает имя файла.
а вам надо указать
@path - возвращает полный путь к файлу.
CMD/BAT - [решено] Удаление большого количества папок и файлов
Не совсем понятно, что Вы имели в виду? Поставить в конце команды @path вместо @file ?
Попробовал указать, ничего не изменилось.
-
finderhd
Re: CMD/BAT - [решено] Удаление большого количества папок и файлов
Цитата finderhd:
Folder_main\YYYYMMDD\
Цитата finderhd:
Нужно удалить все старые папки вместе с файлами, не трогая последние три.
Если я правильно понял, надо оставить нетронутыми последние 3 папки, допустим:
Folder_main\20200210\
Folder_main\20200205\
Folder_main\20200203\
А предыдущие:
Folder_main\20200202\
Folder_main\20200201\
Folder_main\20200128\
Folder_main\20191231\
.......
удалить.
Код:
ИМХО, это максимально быстрый вариант, не думаю, что стОит разбивать этот процесс на части, при такой постановке задачи опускаться до работы с подпапками и удаления файлов не комильфо - преступно медленно.Можете поставить этот скрипт в планировщик и запускать его хоть сто раз в день. Гарантировано останутся три созданные последними папки.
Вставил визуальный контроль процесса, если это не надо - уберите выделенное красным цветом. ОцЕните скорость выполнения - если посчитаете, что всё-таки надо процесс разбить - пишите.
Folder_main\YYYYMMDD\
CMD/BAT - [решено] Удаление большого количества папок и файлов
Цитата finderhd:
Нужно удалить все старые папки вместе с файлами, не трогая последние три.
CMD/BAT - [решено] Удаление большого количества папок и файлов
Если я правильно понял, надо оставить нетронутыми последние 3 папки, допустим:
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ИМХО, это максимально быстрый вариант, не думаю, что стОит разбивать этот процесс на части, при такой постановке задачи опускаться до работы с подпапками и удаления файлов не комильфо - преступно медленно.Можете поставить этот скрипт в планировщик и запускать его хоть сто раз в день. Гарантировано останутся три созданные последними папки.
Вставил визуальный контроль процесса, если это не надо - уберите выделенное красным цветом. ОцЕните скорость выполнения - если посчитаете, что всё-таки надо процесс разбить - пишите.
-
Busla
Re: CMD/BAT - [решено] Удаление большого количества папок и файлов
Цитата megaloman:
не думаю, что стОит разбивать этот процесс на части, при такой постановке задачи опускаться до работы с подпапками и удаления файлов не комильфо - преступно медленно.
Да нет, нормально будет, хоть спускаясь рекурсией внутрь по дереву (я бы так и делал — спускался вниз рекурсией, удалял старые файлы, а на возврате из рекурсии вверх проверял каталог на пустоту и, если это так — тогда удалял бы его).
P.S. Первый раз можно и «ручками» удалить
.
не думаю, что стОит разбивать этот процесс на части, при такой постановке задачи опускаться до работы с подпапками и удаления файлов не комильфо - преступно медленно.
CMD/BAT - [решено] Удаление большого количества папок и файлов
Да нет, нормально будет, хоть спускаясь рекурсией внутрь по дереву (я бы так и делал — спускался вниз рекурсией, удалял старые файлы, а на возврате из рекурсии вверх проверял каталог на пустоту и, если это так — тогда удалял бы его).
P.S. Первый раз можно и «ручками» удалить
.-
megaloman
Re: CMD/BAT - [решено] Удаление большого количества папок и файлов
Busla, Обратите внимание, я адресовал Вам пост и излагал мысли в рамках деловой этики. Должен заметить, у меня за спиной более десятка лет успешного обслуживания серьезной информационной системы. Вы не привели ни одного внятного довода моей неправоты, не предложили своего, на Ваш взгляд, правильного решения. Тролльте, если Вам так нравится. Но далее без меня.
-
finderhd
Re: CMD/BAT - [решено] Удаление большого количества папок и файлов
finderhd, а не хотите отталкиваться от даты создания файла вместо "трёх последних папок"?
-
Ageron
Re: CMD/BAT - [решено] Удаление большого количества папок и файлов
Вот вариант с ограничением количества удаленных папкодней
[spoiler]Код: [/spoiler]
Set "BoxIn=Z:\Box_In\Folder_Main" - здесь пропишИте свой путь
Set /A Skip=3 -здесь количество дней, которые нужно оставить
Set /A MaxCount=365 -здесь количество дней (не более), удаляемых за один запуск батника.
Батник можно поместить в планировщик, запускать хоть раз в день, хоть несколько (надо при этом быть уверенным, что предыдущий запуск уже успел отработать).
При указанных параметрах и если задание в планировщике запускать раз в сутки, за 10 дней 10 лет Вы убьете и в последующем будут всегда оставаться три последних дня.
[spoiler]Код: [/spoiler]
Код: Выделить всё
@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 0Set "BoxIn=Z:\Box_In\Folder_Main" - здесь пропишИте свой путь
Set /A Skip=3 -здесь количество дней, которые нужно оставить
Set /A MaxCount=365 -здесь количество дней (не более), удаляемых за один запуск батника.
Батник можно поместить в планировщик, запускать хоть раз в день, хоть несколько (надо при этом быть уверенным, что предыдущий запуск уже успел отработать).
При указанных параметрах и если задание в планировщике запускать раз в сутки, за 10 дней 10 лет Вы убьете и в последующем будут всегда оставаться три последних дня.
-
megaloman
Re: CMD/BAT - [решено] Удаление большого количества папок и файлов
Цитата megaloman:
Iska, в чём смысл?
В большей гибкости. Когда внутри могут оказаться файлы возрастом много младше каталогов, например.
Iska, в чём смысл?
CMD/BAT - [решено] Удаление большого количества папок и файлов
В большей гибкости. Когда внутри могут оказаться файлы возрастом много младше каталогов, например.
-
Iska
Re: CMD/BAT - [решено] Удаление большого количества папок и файлов
Цитата Iska:
Когда внутри могут оказаться файлы возрастом много младше каталогов, например.
Их нет, даже если они существуют. При том количестве файлов если какой-то файл нарушает чем-то порядок хранения - его нет. А если работает автоматизированная система- то их и в принципе быть не должно.
Когда внутри могут оказаться файлы возрастом много младше каталогов, например.
CMD/BAT - [решено] Удаление большого количества папок и файлов
Их нет, даже если они существуют. При том количестве файлов если какой-то файл нарушает чем-то порядок хранения - его нет. А если работает автоматизированная система- то их и в принципе быть не должно.