Показать полную графическую версию : Нужен батник чтоб удалял папки выше 10 дней
Krol0071
03-07-2012, 09:15
Добрый день!
Смотрю есть люди которые выручают друг друга.
Выручите народ пожалуйста и меня! :)
Очень нужен бат-файл чтобы удалял старые папки свыше 10 дней.
Пример:
есть путь D:\arhiv
В данной папке "arhiv" создаются папки с именем, формата "20110420" в которых содержатся файлы.
Вот и нужен батник чтобы удалял все старые папки по данному пути.
Заранее благодарен!!!
Krol0071
03-07-2012, 09:57
да еще забыл сказать, что в этих папках хронятся файлы формата .txt
http://www.outsidethebox.ms/11968/
Krol0071
03-07-2012, 10:50
Vadikan, спасибо за совет, но там в основном написано как удалять файлы.
А это я знаю. Меня больше интересует как можно удалять папки сроком выше 10 дней. Но как известно папка не будет удалена пока она не пуста. Вот в этом и загвостка.
По этому я к вам и пришел. Нужен батник который сможет удалять получается файлы в подкаталогах свыше 10 дней или сразу папки свыше 10 дней.
Как написать я не знаю.... в этом деле не очень силен, так начинающий только.
megaloman
03-07-2012, 11:14
@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 /?). Проблема пересчитать дату. Использовал решение (http://forum.oszone.net/thread-186889.html). Я предполагал, что в папке архив нет иных папок, кроме как с именем по датам.
Подозреваю, что короче получится, если использовать утилиту forfiles (http://technet.microsoft.com/ru-ru/library/cc753551(v=ws.10)), но стандартно она имеется в системе далеко не всегда.
Krol0071
03-07-2012, 11:36
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
megaloman
03-07-2012, 11:48
Самое простое сделать несколько циклов последовательно вместо одного из предыдущего решения, если в папках всё те же архивы с именами по дате и убить надо одинаково старые папки
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
Если папок с архивами много, пишите, но хотелось бы знать, по какому правилу образованы их имена.
kiripanda
03-07-2012, 14:15
@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
sergeypele
29-04-2013, 17:56
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
greenOwl
03-07-2013, 16:01
Я предполагал, что в папке архив нет иных папок, кроме как с именем по датам.
А если имена не по датам ? как можно выйти из этой ситуации ?
sunnykey
05-07-2013, 11:04
А если имена не по датам ? как можно выйти из этой ситуации ? »
Уже стопицот раз обсуждали такие темы:CMD/BAT - Удаление по дате (http://forum.oszone.net/post-2179231-3.html)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.