Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Удаление папки по дате (http://forum.oszone.net/showthread.php?t=182315)

Obnin 06-08-2010 16:32 1468293

Удаление папки по дате
 
Всем добрый день!

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

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

Спасибо!

Олег97 06-08-2010 17:13 1468317

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

NiOl 06-08-2010 17:16 1468318

Есть маленькая сложность - если Вы желаете отмерить ИМЕННО 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%)

deepred 06-08-2010 18:14 1468350

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


Obnin 09-08-2010 13:31 1469978

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

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

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

Код:

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

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

.... и т.д.


NiOl 09-08-2010 13:51 1469992

Цитата:

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

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

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

deepred 09-08-2010 14:33 1470018

Obnin,

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

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

Цитата NiOl
Вам будет вполне достаточно указать путь к установленному архиватору (на каждой машине), а не таскать его со скриптом. »

, полезное замечание, дополнительно можно воспользоваться приглашением командной строки prompt

Obnin 09-08-2010 14:49 1470034

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

Sony777 14-12-2011 13:21 1815024

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

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


Время: 16:05.

Время: 16:05.
© OSzone.net 2001-