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

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

Ответить
Настройки темы
CMD/BAT - Нужен батник чтоб удалял папки выше 10 дней

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


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

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


Добрый день!

Смотрю есть люди которые выручают друг друга.
Выручите народ пожалуйста и меня!
Очень нужен бат-файл чтобы удалял старые папки свыше 10 дней.
Пример:

есть путь D:\arhiv
В данной папке "arhiv" создаются папки с именем, формата "20110420" в которых содержатся файлы.
Вот и нужен батник чтобы удалял все старые папки по данному пути.

Заранее благодарен!!!

Отправлено: 09:15, 03-07-2012

 

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


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

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


да еще забыл сказать, что в этих папках хронятся файлы формата .txt

Отправлено: 09:57, 03-07-2012 | #2



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

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


(*.*)


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

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


https://www.outsidethebox.ms/11968/

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 10:08, 03-07-2012 | #3


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


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

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


Vadikan, спасибо за совет, но там в основном написано как удалять файлы.
А это я знаю. Меня больше интересует как можно удалять папки сроком выше 10 дней. Но как известно папка не будет удалена пока она не пуста. Вот в этом и загвостка.
По этому я к вам и пришел. Нужен батник который сможет удалять получается файлы в подкаталогах свыше 10 дней или сразу папки свыше 10 дней.
Как написать я не знаю.... в этом деле не очень силен, так начинающий только.

Отправлено: 10:50, 03-07-2012 | #4


Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo Off

Set Arhiv=D:\arhiv
Set DeltaDay=-10

SetLocal EnableDelayedExpansion
Call :FromNow %DeltaDay% %Date%

FOR /F "usebackq delims=" %%d IN (`Dir "%Arhiv%\" /A:D /B`) DO If %%d LSS %yyyymmdd% Rd "%Arhiv%\%%d" /s /q
GoTo :Eof

:FromNow
rem
rem Пересчет даты на заданное кол-во дней
rem Формат даты dd.mm.yyyy +- дни получим новые yyyymmdd
rem
rem Пример использования
rem 
rem SetLocal EnableDelayedExpansion
rem Set DeltaDay=-10
rem Call :FromNow %DeltaDay% %Date%
rem Echo %Date%  %DeltaDay%  %yyyymmdd%

 SetLocal
 Set DT=%2
 Set yyyy=%DT:~-4%& set /a mm=100%DT:~3,2%%%100& set /a dd=100%DT:~,2%%%100
 Set /A JD=%~1+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4
 Set /A L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001
 Set /A L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11
 Set /A J=J+2-12*L,I=100*(N-49)+I+L
 Set /A yyyy=I,mm=100+J,dd=100+K
 EndLocal& Set yyyymmdd=%yyyy%%mm:~-2%%dd:~-2%
GoTo :Eof
Не проблема убить папку (смотрите Rd /?). Проблема пересчитать дату. Использовал решение. Я предполагал, что в папке архив нет иных папок, кроме как с именем по датам.
Подозреваю, что короче получится, если использовать утилиту forfiles, но стандартно она имеется в системе далеко не всегда.

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


Последний раз редактировалось megaloman, 03-07-2012 в 11:26.

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

Отправлено: 11:14, 03-07-2012 | #5


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


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

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


megaloman, респект и уважение тебе! долгих лет жизни! Я в восторге! Все работает!

Но вот еще один вопрос появился, а можно ли в одном батнике написать несколько путей?

в данном примере D:\arhiv, а можно допустим
D:\arhiv\1\1\2 и
D:\arhiv\1\1\3

Пример того что хочу объяснить:

Set Arhiv=D:\arhiv\1\1\2
Set Arhiv=D:\arhiv\1\1\3

...а потом уже пошло
Set DeltaDay=-10

SetLocal EnableDelayedExpansion
Call :FromNow %DeltaDay% %Date%



Спасибо тебе огромное, megaloman

Отправлено: 11:36, 03-07-2012 | #6


Ветеран


Contributor


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

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


Самое простое сделать несколько циклов последовательно вместо одного из предыдущего решения, если в папках всё те же архивы с именами по дате и убить надо одинаково старые папки
Код: Выделить весь код
Set Arhiv=D:\arhiv\1\1\2
FOR /F "usebackq delims=" %%d IN (`Dir "%Arhiv%\" /A:D /B`) DO If %%d LSS %yyyymmdd% Rd "%Arhiv%\%%d" /s /q
Set Arhiv=D:\arhiv\1\1\3
FOR /F "usebackq delims=" %%d IN (`Dir "%Arhiv%\" /A:D /B`) DO If %%d LSS %yyyymmdd% Rd "%Arhiv%\%%d" /s /q
Если папок с архивами много, пишите, но хотелось бы знать, по какому правилу образованы их имена.

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


Последний раз редактировалось megaloman, 03-07-2012 в 11:56.


Отправлено: 11:48, 03-07-2012 | #7


Старожил


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

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


Код: Выделить весь код
@echo off &setlocal enableextensions

set /a Last=10

call :rd "z:\arhiv\0\1\2"
call :rd "z:\arhiv\0\1\3"
goto :eof

:rd
for /f "skip=%Last%" %%d in (
'dir /b/ad/o-n "%~1\????????" ^|findstr /rbec:[0-9]*'
) do rd /s /q "%~1\%%d"
goto :eof
оставляет последние 10

Отправлено: 14:15, 03-07-2012 | #8


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


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

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


vbs удаляет все в указанной директории
set fso=Wscript.CreateObject("Scripting.FileSystemObject")

dir="C:\mail"
Set f = fso.GetFolder(dir)
Set fc = f.Files
For Each f1 in fc
d= f1.DateCreated
diff=DateDiff("d",d,Now)
if diff>10 Then # лол-во дней
WScript.Echo "DELETE! " & f1.name
fso.DeleteFile(dir & "\" & f1.name)
end if
Next

Отправлено: 17:56, 29-04-2013 | #9


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


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

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


Цитата:
Я предполагал, что в папке архив нет иных папок, кроме как с именем по датам.
А если имена не по датам ? как можно выйти из этой ситуации ?

Отправлено: 16:01, 03-07-2013 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - чтобы батник автоматически удалял бы все подкаталоги, размер которых makc2364 Скриптовые языки администрирования Windows 1 19-12-2011 12:09
CMD/BAT - нужен батник для сканирования папки TuFED Скриптовые языки администрирования Windows 6 25-08-2011 23:06
CMD/BAT - Нужен батник) ОПК 3.19 siss Тест-форум 1 13-12-2010 20:38
CMD/BAT - Батник запускающийся через каждые 14 дней ofcoss Скриптовые языки администрирования Windows 3 07-09-2009 11:57
Нужен макрос на VB чтобы в Ворде удалял лишние пробелы Leon71 Программирование и базы данных 2 28-07-2003 02:26




 
Переход