Счетчик HotLog

На главнуюЧто я делаю...Программы автора и не только...Творчество
Статьи автораКнига отзывов и предложенийОбо мне, любимомФотоальбом

 
 

Автоочистка временной папки

Наверное ни для кого не секрет, что в операционной системе существуют временные папки, куда программы складывают свои временные данные и благополучно о них забывают. С течением времени эти временные папки превращаются в одну большую свалку непонятно чего и непонятно чьего. Рекомендуется периодически их очищать и, как водится, вручную. Автоматизируем этот процесс.

Для начала настроим пути к временным папкам. По умолчанию они запрятаны довольно далеко: Documents and Settings\<имя_пользователя>\Local settings\Temp. С моей точки зрения, гораздо удобнее, когда эта папка (папки) лежат где-нибудь «ближе к поверхности» и их число стремится к 1. Для этого нам понадобится поковыряться в свойствах системы. Правый щелчок по значку Мой компьтер, закладка Дополнительно, кнопка Переменные среды.

Свойства системы

В открывшемся диалоговом окне Переменные среды меняете как пользовательские, так и системные переменные среды на желаемое значение. У меня, например, все временные файлы складываются в папку D:\Temp.

Переменные среды

Полдела сделано, теперь найти свалку гораздо проще. Решим теперь задачу автоматической очистки временной папки. Для этого напишем довольно простой скрипт:

cd D:\Temp
del /s /q *.*

Сохраним его в, например, ClearTempFolder.bat. Всё, теперь запуск этого пакетного файла удалит всё что возможно из временной папки. А для автоматизации поместим ярлык на этот пакетный файл в пункт Автозагрузка главного меню. Теперь при каждом запуске компьютера временная папка будет автоматически очищаться.

Примечание

Удаление данных - дело ответственное, будьте предельно внимательны, ибо ошибка может дорогого стоить. Расскажу о возможных последствиях, которые я испытал «на собственной шкуре».

После очередной не совсем плановой переустановки Windows (полетел жесткий диск) всё пришлось перенастраивать, переустанавливать, перепрописывать и т.д. То же самое произошло и с этим скриптом, который я довольно давно успешно использую. После того, как я поместил ярлык в автозагрузку, я выполнил скрипт вручную. Увидев длиннющий отчет выполнения, я сначала удивился, сколько мусора успело накопиться за несколько дней. Потом я заметил, что удаление происходит не из временной папки, удаляются мои документы! Похолодев, я закрыл cmd.exe (эта утилита занимается выполнением пакетных файлов) и отправился оценивать нанесенный ущерб. А он оказался страшным: утерялась большая половина документов, фотографий и т.д. В том числе исчезла и база писем Outlook. Просмотр содержимого корзины облегчения не принес - скрипт удаляет файлы «мимо» корзины.

Спас меня Unerase Wizard из Norton Utilities компании Symantec. Всё или нет удалось восстановить, сказать сейчас сложно, так как учета документов я не веду, но поверхностный осмотр утрат не выявил.

Теперь разберемся в причинах происшедшего и найдем, как обезопасить себя от повторного проявления.

Как уже было сказано выше, ОС я переставил из-за приобретения нового винчестера. Тогда же и переехала временная папка. Поэтому результатом выполнения команды

cd D:\Temp

стало

Системе не удается найти указанный путь.

Текущая папка не сменилась, а осталась прежней (Мои документы), зато следующая команда скрипта

del /s /q *.*

исполнилась на ура.

Выводы

Никогда не помещайте скрипт удаления данных какой-либо текущей папки в другую папку, в которой содержатся данные. Лучше создайте для хранения этого скрипта отдельную папку и поместите его туда. Тогда, даже если текущая папка не сменится на временную, единственные данные, которые будут удалены - это сам скрипт. И упаси вас бог класть подобное богатство в корень диска! :) Ну и, конечно, просто будьте внимательны.


Дополню.

Внимание - вещь полезная, но лучше все-таки обезопасить себя насколько только возможно. Как выяснилось, смена текущей папки - вещь крайне ненадежная, запуск из FAR, например, привел к удалению всего содержимого папки программы, какое только не было заблокировано в момент вызова скрипта. Из этого делаем вывод, что текущая реализация скрипта недостаточно безопасна. Что ж, доработаем его.

Начнем с самого простого - вывода справки по команде del:

Удаление одного или нескольких файлов.

DEL [/P] [/F] [/S] [/Q] [/A[[:]атрибуты]] имена
ERASE [/P] [/F] [/S] [/Q] [/A[[:]атрибуты]] имена

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

  /P          Запрос на подтверждение перед удалением каждого файла.
  /F          Принудительное удаление файлов, доступных только для чтения.
  /S          Удаление указанных файлов из всех подкаталогов.
  /Q          Отключение запроса на подтверждение при удалении файлов.
  /A          Отбор файлов для удаления по атрибутам.
  атрибуты    S  Системные файлы       R  Доступные только для чтения
              H  Скрытые файлы         A  Файлы для архивирования
              Префикс "-" имеет значение НЕ

Изменение команд DEL и ERASE при включении расширенной обработки команд:

Результаты вывода для ключа /S принимают обратный характер, то есть выводятся
только имена удаленных файлов, а не файлов, которые не удалось найти.

В справочной информации ключевыми для нас являются слова "Для удаления сразу нескольких файлов используются подстановочные знаки". Доработаем наш скрипт (он до неприличия сократится):

del /f /s /q D:\Temp\*.*

Всё, теперь можно быть уверенным, что ничего лишнего никогда не удалится, скрипт будет работать только в заданной папке и ни в одной более.

 
 

10.11.2007

 
     
Hosted by uCoz