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

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

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

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


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

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


Всем добрый день!

Имеются папки - архивы за каждый день. Названия папки - это дата создания архива.

Подскажите пожалуйста, каким образом можно удалить все папки, дата создания которых больше, например, 10-ти дней.
Если нельзя удалить по названию, может можно удалить по дате создания...

Спасибо!

Отправлено: 16:32, 06-08-2010

 

Аватара для Олег97

Старожил


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

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


Obnin, формат даты папок 25.12.10 или 25\12\10? пожалуйста пример.

-------
У кого-то глюкогенератор, а у нас bugодельня...


Отправлено: 17:13, 06-08-2010 | #2



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

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


Старожил


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

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


Есть маленькая сложность - если Вы желаете отмерить ИМЕННО 10 ДНЕЙ - Вам придется столкнуться с расчетом календаря, эта тема здесь несколько раз поднималась и если честно, мне ни одно решение этой задачи не показалось "красивым", но да это "имхо". Если упростить Вашу задачу и сохранять просто 10 последних архивов, а не за последние 10 дней (в случае, если бэкап по какой-либо причине не прошел, то архивных копий за последние 10 дней может оказаться значительно меньше, а то и вообще не оказаться...), то такие вопросы здесь тоже поднимались и решение очень просто:
Код: Выделить весь код
@echo off
SetLocal EnableExtensions

set BackUp=MyDisk:\MyBackUp
set Num=10

pushd %BackUp%
for /f "tokens=* delims=" %%D in ('dir /ad /b /o-d') do call :Proceed "%%D"
popd
exit

:Proceed
if not %Num%==0 set /a Num-=1&exit /b
echo %date% %time%: Erase %1>>%~dpn0.log
rd /s /q %1 2>nul >nul
exit /b
* сортировка каталогов не по названию даты, а именно по дате выбрана потому, что неизвестен формат, в котором записана дата каталогов: чаще всего каталоги называют в виде "DD.MM.YYYY", т.к. это более простой способ, хотя для наглядности гораздо удобнее создавать каталоги в виде "YYYY-MM-DD" - хотя такое имя еще надо получить... (например так: %date:~6,4%-%date:~3,2%-%date:~0,2%)

-------
Как сказало Дерево Дровосеку: "я - пень".

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

Отправлено: 17:16, 06-08-2010 | #3


Пользователь


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

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


Obnin,

Просто огромный плюс свойств FSO - это работа с датами обьектов:

Код: Выделить весь код
Option Explicit 
Dim FSO, Folder, subFolder
Dim strSource
Dim intErrLevel
  
    strSource   = "F:\disk" ' папка содержащая каталоги для проверки
    intErrLevel = 0

    Set FSO = WScript.CreateObject("Scripting.FileSystemObject")     
 
    If FSO.FolderExists(strSource) Then
       Set Folder = FSO.GetFolder(strSource)
           For Each subFolder In Folder.subFolders
               if DateDiff("D", subFolder.DateLastModified, Now) > 10 Then
                  subFolder.Delete 
               End If   
           Next
    Else
           WScript.Echo "папка " & strSource & " не найдена." 
           intErrLevel = 1
     End If 
     Set FSO = Nothing 
WScript.Quit intErrLevel

Последний раз редактировалось deepred, 07-08-2010 в 21:31.


Отправлено: 18:14, 06-08-2010 | #4


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


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

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


Вариант NiOl отлично работает! Огромное спасибо!
А вариант deepred сильно ругается на отсутствие компонент...

Еще один малюсенький вопросик.
Все это дело планируется еще и архивировать, причем на Win64.
На Win32 я скопировал Rar.exe из папки установки winrar, и использую его.
Будет ли он работать на 64bit(сейчас проверить не могу)?
Если нет, то что посоветуете?

относительно "А вариант deepred сильно ругается на отсутствие компонент..." пишет:

Код: Выделить весь код
C:\tst>Option Explicit
"Option" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\tst>Dim FSO, Folder, subFolder
"Dim" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

.... и т.д.

Отправлено: 13:31, 09-08-2010 | #5


Старожил


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

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


Цитата Obnin:
относительно "А вариант deepred сильно ругается на отсутствие компонент..." пишет: »
Скрипт, приведенный DeepRedом - на вижалбэйсике. Соответственно его надо сохранить с расширением .VBS (кажется)

Про 64-битную ОС я не скажу ничего, но Вам будет вполне достаточно указать путь к установленному архиватору (на каждой машине), а не таскать его со скриптом. Может быть придется переползти на zip - существуют бесплатные, смд реализации этого архиватора...

-------
Как сказало Дерево Дровосеку: "я - пень".


Отправлено: 13:51, 09-08-2010 | #6


Пользователь


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

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


Obnin,

М-да, не задачка вышла - как-то не догадался подписать, что код является сценарием WSH (Windows Script Host) и написан на языке VBScript,что NiOl совершенно верно определил.

По поводу Rar.exe у меня он замечательно работает на машине с архитектурой x64 под WinVista HP 64bit, думаю и у вас пробем не возникнет, к тому разработчик WinRar "обещал" полную совместимость...
Цитата NiOl:
Вам будет вполне достаточно указать путь к установленному архиватору (на каждой машине), а не таскать его со скриптом. »
, полезное замечание, дополнительно можно воспользоваться приглашением командной строки prompt

Отправлено: 14:33, 09-08-2010 | #7


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


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

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


Большое всем спасибо!
Потестим, посмотрим...

Отправлено: 14:49, 09-08-2010 | #8


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


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

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


NiOl, спасибо за скрипт, очень помог. Но было бы замечательно, если бы помогли разобраться, как сделать чтобы скрипт работал на несколько разных дисков и директорий, а не на одну. Вот у меня 2 раздела жесткого куда записываются архивы и на каждом разделе по 3+ директории. Как изменить скрипт чтобы можно было прописывать несколько директорий? Или есть еще какие-то варианты?
В общем подводя итог - скрипт работает на отлично, нужно только чтобы он делал это все не только в одной директории. За ранее спасибо.

Я реализовал это описуя каждую директорию отдельно и прописуя цикл и условие каждой директории соответственно. Так все работает хорошо, но скрипт, а тем более батник при выполнении выходит большим.

Последний раз редактировалось Sony777, 14-12-2011 в 14:17.


Отправлено: 13:21, 14-12-2011 | #9



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Удаление файлов из сетевой папки VERVIL Microsoft Windows NT/2000/2003 2 15-04-2010 05:22
Доступ - Удаление папки uhaalex Microsoft Windows 2000/XP 1 16-06-2009 02:11
Разное - [решено] Удаление папки Drix Microsoft Windows Vista 13 05-05-2008 08:55
Разное - удаление папки- элемент не найден rustam1107 Microsoft Windows Vista 3 04-03-2008 11:34
Удаление расшареной папки в Win98 Lumer Microsoft Windows 95/98/Me (архив) 2 02-12-2004 14:12




 
Переход