Утилита на AutoIT для выборочной очистки «корзин» дисков компьютера.

Часто ли Вы заглядываете в "корзины" жестких дисков, или это происходит только тогда, когда на машине не хватает свободного места? А если из-за нехватки свободной дисковой памяти будет нарушена работа системы? Ниже предлагается одно из решений по очистке "корзин" жестких дисков  с ограничениями на размер удаляемых файлов.

Поводом для написания программы послужил случай у клиента, когда вечерний бэкап файловой базы данных 1с не был выполнен из-за большого совокупного размера файлов баз (упакованный архив занимал более 8 Гб) и вследствие этого — отсутствие свободного места на диске, так как копии архивных данных хранились за  несколько дней, и хотя программа создания архивных копий следила за их количеством в каталоге архива, старые копии она отправляла в корзину. Пока на диске было место, и корзина периодически чистилась вручную администратором, проблем не было. Но как только администратор в какой-то момент не выполнил  регламентных действий по очистке корзины – проблемы возникли. Появилось желание автоматизировать очистку корзины диска с условием удаления архивных файлов, размер которых превышает определенную величину (удаление файлов больше заданного размера).

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

 

Полные тексты программ и откомпилированные модули для 64-х и 32-х  версий приведены во вложении. Там представлен универсальный вариант (для Windows XP и Windows 7-2008) с возможностью задавать параметры в командной строке.

 

В нашем случае мы запускаем данную утилиту до начала рабочего дня по расписанию, системными средствами, через планировщик заданий. Поэтому, если кто-то случайно удалит свой большой архив в рабочее время — у него в запасе есть почти сутки для восстановления его из корзины.

7 Comments

  1. vcv

    А почему бы не сделать примитивно:

    pushd f:$recycle.bin

    del /S /F /Q *.rar

    del /S /F /Q *.zip

    popd

    Или так

    forfiles /S /M *.zip /D -1 /P f:$recycle.bin /C «cmd /c del @path»

    forfiles /S /M *.rar /D -1 /P f:$recycle.bin /C «cmd /c del @path»

    и удалятся в корзине все zip и rar вчерашние и старее.

    Reply
  2. LexSeIch

    (1) vcv,

    Внимательно читайте заметку — там же написано, что простые скрипты не использовались, так как не было нужды удалять ВСЕ файлы, а только определенные — больших размеров… В Вашем варианте удаляется все содержимое с заданным расширением… Кроме того, чистка делается по ВСЕМ дискам… Когда в корзине лежат файлы разных пользователей — надо действовать осмотрительно.

    Reply
  3. vcv
    Внимательно читайте заметку — там же написано, что простые скрипты не использовались, так как не было нужды удалять ВСЕ файлы, а только определенные — больших размеров…

    да пожалуйста

    @echo off
    for /F «tokens=3» %%i in (‘echo list volume #k8SjZc9Dxk| diskpart #k8SjZc9Dxk| findstr «NTFS»‘) do (
    pushd «%%i:$recycle.bin»
    for /R %%j in (*.zip) do if %%~zj gtr 8388608000 del /F /Q %%~fj
    for /R %%j in (*.rar) do if %%~zj gtr 8388608000 del /F /Q %%~fj
    popd
    )

    Кроме того, чистка делается по ВСЕМ дискам…

    Где? На скриншоте наглухо прописан путь f:$recycle.bin

    Я категорически не против AutoIT. Если он есть и умеете им пользоваться, да на здоровье! Но, решать примитивную админскую задачу на нештатном и не самом распространённом админском инструменте, считаю излишеством. Есть штатный batch. Есть практически штатный powershell. Есть штатный Windows Script Host. На худой конец есть практически штатный .NET Framework, в котором встроенный компилятор vbc.exe.

    Мне это всё кажется более подходящим инструментом для более-менее тиражного решения (если уж опубликовано для общего обозрения).

    Но это всё, естественно, личное мнение. Никому не навязываю.

    Засим разрешите откланяться. Поводов для дискуссии тут более не наблюдается.

    Reply
  4. LexSeIch

    (3) vcv,

    Нисколько не сомневаюсь в Вашей компетентности и уважаю Ваше мнение… Даже выражаю Вам благодарность за комментарии — кому то больше понравиться Ваше решение… Но не все такие продвинутые… Да и штатные средства на разных машинах разные (запустите Ваш скрипт на XP или W2003)… Вы же не скачивали прикрепленный архив и не смотрели что в нем? Там как раз и лежит универсальное решение — скомпилированная утилита поддерживающая разные типы операционных систем (XP, W2003, W7, W2008), с возможностью задания параметров: расширения архивов и ограничения по размеру, выбора диска — это для тех, кто хочет просто получить результат (все в исходниках и скомпилированных для 32-х и 64-х разрядных систем)… Что касается AutoIT, то лично для меня — приятней и понятней алгоритмы описанные на нем. И я считаю, что он отлично подходит и понятен тем, кто программирует на 1С платформе.

    Reply
  5. ya.Avoronov

    (4) долго вчитывался и не смог понять причем тут 1С, если только косвенно как программа требующая свободное пространство время от времени.

    А возможно реализовать эти алгоритмы на языке 1С? Написать обработку, где можно ставить крыжики и настраивать параметры персонально. А то вот передавать параметры в командной строке для меня не наглядно и не удобно, консольный режим 1Совцам не знаком.

    Reply
  6. LexSeIch

    (5) ya.Avoronov,

    Здесь нет упоминания 1C так как заметка для раздела администрирования (сервисные утилиты). По сути это скрипт, запускаемый системой по расписанию, написанный для снятия определенной проблемы — очистки корзин дисков сервера для файловой конфигурации. Не обязательно все решать средствами языка платформы 1С — иногда проще это сделать по другому: вот товарищ в комментариях предлагает иное решение. AutoIT позволяет получить скомпилированный EXE-файл с «зашитыми» внутри него параметрами запуска — готовое решение без всякой командной строки.

    Reply
  7. viptextil

    (3) vcv,

    Я категорически не против AutoIT. Если он есть и умеете им пользоваться, да на здоровье! Но, решать примитивную админскую задачу на нештатном и не самом распространённом админском инструменте, считаю излишеством. Есть штатный batch. Есть практически штатный powershell. Есть штатный Windows Script Host. На худой конец есть практически штатный .NET Framework, в котором встроенный компилятор vbc.exe.

    Мне это всё кажется более подходящим инструментом для более-менее тиражного решения (если уж опубликовано для общего обозрения).

    Подпишусь под каждым словом.

    Хотя и такая реализация алгоритма имеет право на существование, тем более, что с поставленной задачей она справляется.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *