Vbs удалить файлы по маске

Обновлено: 06.07.2024

Есть три способа создания пустого текстового файла (иногда называемого как «text stream»).

Первый способ — это использование метода CreateTextFile. В следующем примере показано, как создать текстовый файл, используя этот метод: Пример использования данного метода см. в разделе «3.7. Пример работы с объектом FileSystemObject».

Второй способ — это использование метода OpenTextFile объекта FileSystemObject с набором флагов ForWriting. В следующем примере показано, как создать текстовый файл, используя этот метод: Третий способ — это использование метода OpenAsTextStream с набором флагов ForWriting. В следующем примере показано, как создать текстовый файл, используя этот метод:

Добавление данных в файл

  • Открыть текстовый файл
  • Записать данные
  • Закрыть файл

Для записи данных в текстовый файл используйте методы Write, WriteLine или WriteBlankLines объекта TextStream, в зависимости от задач, описанных в приведённой ниже таблице:

Задача Метод
Запись данных в текстовый файл без символа перехода на новую строку в конце Write
Запись данных в текстовый файл с символом перехода на новую строку в конце WriteLine
Запись одной или более пустых строк в открытый текстовый файл WriteBlankLines

Для закрытия текстового файла используйте метод Close объекта TextStream. Закрыть файл можно также методом Close объекта FileSystemObject. Пример использования данных методов см. в разделе «3.7. Пример работы с объектом FileSystemObject».

ПРИМЕЧАНИЕ
Символ новой строки содержит символ или символы (зависит от операционной системы) для перевода курсора в начало новой строки (возврат каретки/перевод строки). Следует учитывать, что некоторые строки уже могут иметь в конце эти непечатаемые символы.

В следующем примере показано, как выполняется запись данных в открытый файл всеми тремя методами, затем файл закрывается:

Чтение файлов

Для чтения данных из файла используйте методы Read, ReadLine или ReadAll объекта TextStream. Эти методы и задачи, решаемые с их помощью, описаны в приведённой ниже таблице:

Задача Метод
Чтение указанного количества символов из файла Read
Чтение полной строки из файла (до символа конца строки, но не включая его) ReadLine
Чтение всего содержимого файла ReadAll

Пример использования данных методов см. в разделе «3.7. Пример работы с объектом FileSystemObject».

Если вы используете методы Read или ReadLine и хотите пропустить определённую часть данных, то используйте методы Scip или ScipLine. Полученный в результате работы этих методов текст может быть сохранён в строку, которую можно отобразить на экране в элементе управления, передать в качестве параметра в строковую функцию (например, в Left, Right или Mid), соединить с другой строкой и т.п.

В следующем примере показано, как открыть файл, записать в него данные, а затем прочитать их:

Перемещение, копирование и удаление файлов

Объектная модель FSO имеет для каждой из операций перемещения, копирования или удаления файлов по два метода. Эти методы и задачи, решаемые с их помощью, описаны в приведённой ниже таблице:

Задача Метод
Перемещение файла File.Move или FileSystemObject.MoveFile
Копирование файла File.Copy или FileSystemObject.CopyFile
Удаление файла File.Delete или FileSystemObject.DeleteFile

Пример использования данных методов см. в разделе «3.7. Пример работы с объектом FileSystemObject».

В следующем примере создаётся текстовый файл в корневом каталоге диска С, записывается в него некоторая информация. Затем файл перемещается в директорию с именем \tmp, копируется в директорию \temp, а затем удаляются копии из обеих директорий.

Для проверки работы этого примера создайте в корневом каталоге диска С директории tmp и temp.

Как вы удаляете временные файлы? Вручную запускаете CCleaner или аналогичную программу, либо настроили ее запуск по расписанию? Я обхожусь встроенными средствами Windows, причем все сводится буквально к одной команде. Я хочу поделиться с вами двумя скриптами, которые давно служат мне верой и правдой для удаления ненужных файлов.

В Windows есть утилита для очистки диска, которую можно настроить для удаления заданных категорий файлов по расписанию. Она легко справится с очисткой временных файлов из расположений, известных системе, но не позволит удалять ненужные файлы из заданной вами папки. С помощью скриптов можно очищать не только временные файлы, но и любую папку. Например, я удаляю файлы из папок Test и Temp, которые служат для экспериментов и временного хранения файлов как в загрузках, так и документах.

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

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

Скрипты

Вы можете воспользоваться на выбор скриптами CMD, VBS и PowerShell.

Можно использовать утилиту командной строки forfiles.exe, входящую в состав Windows 7 и новее (когда-то она входила в Windows 2000 Resource Kit). Одной командой удаляются все файлы из указанной папки и вложенных в нее.

Команда для выполнения

  • Вместо %temp% (временной папки в профиле) подставьте свою папку (параметр /p)
  • Возраст файлов по умолчанию 14 дней (параметр /d), но вы можете задать любое значение
  • Можно удалять файлы определенного расширения по маске (например, /m *.log)
  • За рекурсивное удаление (во вложенных папках) отвечает параметр /s

Конечно, в скрипте вы можете использовать несколько команд, каждая из которых будет удалять заданную папку. Справка по использованию утилиты вызывается командой forfiles /?.

Приведенный ниже скрипт VBS удаляет все файлы и папки, включая защищенные, с выводом списка удаленных файлов.

Команда для выполнения

Скрипт можно запускать из командного файла (CMD).

  • Вместо %windir%\temp подставьте свою папку (в этом примере удаляются файлы из временной папки в системном каталоге)
  • Возраст файлов по умолчанию 14 дней, но вы можете задать любое значение
  • Список удаленных файлов будет по умолчанию сохранен в файле %windir%\system32\MyCleanupScript.Log, хотя можно указать любой путь и имя файла

Как и в случае с утилитой forefiles.exe, можно реализовать очистку различных папок, указав каждую в отдельной команде.

PowerShell

Скрипт на PowerShell был в блоге Сергея Мариничева в рамках урока об операциях с файлами, но теперь страница доступна только в архиве интернета. Я скопировал ключевое содержимое для вас:

Выполнение очистки по расписанию

Для выполнения очистки папки по расписанию нужно создать скрипт с именем cleanup.cmd, содержащий команду для запуска, и скопировать его в любую папку из PATH (например, %windir%\system32). Поместите туда же скрипт VBS или PowerShell, если вы решили использовать его, а не утилиту forfiles.ехе.

Задание в планировщике создается одной командой:

Задание с именем CleanUp будет выполняться:

  • с наивысшими правами (параметр /RL)
  • раз в неделю (параметр /SC)
  • по воскресеньям (параметр /D)
  • в 14:00 (параметр /ST)

Откройте Пуск – Поиск – Планировщик заданий и вы увидите в библиотеке планировщика задание CleanUp.

Можете проверить работу задания в планировщике. Для этого щелкните правой кнопкой мыши по заданию и выберите Выполнить.

Готовые файлы

Загрузите архив и распакуйте в любую папку. В архиве варианты forfiles и VBS.

  1. Задайте путь к папке и возраст файлов в скрипте CleanUp.cmd в одной из папок (каждая соответствует одному из описанных выше способов), после чего скопируйте все содержимое папки в %windir%\system32.
  2. Щелкните правой кнопкой мыши на файле schedule.cmd и выберите Запуск от имени администратора, чтобы создать задание.

Благодарности

Авторами скриптов, которые я когда-то почерпнул из этой темы конференции OSZone, являются Keeper2006 и amel27 соответственно. В этой же теме вы найдете другие интересные варианты решения данной задачи, и туда же следует направлять вопросы по доработке скриптов под свои нужды.

А как вы избавляетесь от ненужных файлов – программой или скриптом? Настроена ли у вас очистка по расписанию?

Вадим - владелец этого блога, и почти все записи здесь вышли из-под его пера. Подробности о блоге и авторе здесь. Поддержать автора вы можете тут.

Вас также может заинтересовать:

Подпишитесь на канал и читайте интересные записи чаще! Есть вопросы? Задайте их в чате.

комментариев 75

Великолепно! Взял на вооружение. Сам чищу по расписанию планировщика заданий следующим скриптом:

Ваша оценка: 0 Ваша оценка: +1

equinox, я рад, что вам понравился скрипт. Как вижу, вы использовали похожий метод, но удаляли все целиком. Поскольку я часто открываю файлы без сохранения, они оседают во временных папках. И я предпочитаю иметь двухнедельную подушку, на случай, если они понадобятся.

Мне очень приятно, что вы узнаете много нового из моего блога :) Что же касается обычных пользователей, то мой блог не для них. Он для необычных людей, которые стремятся узнать что-то новое о Windows и расширить свой кругозор :)

Годится! Согласны? +8

Интересный вариант очистки, я пользовался CMD

На который в групповых политиках запланировано выполнение при выходе из системы. Ваш скрипт заинтересовал расширенными возможностями. Спасибо.

Ваша оценка: +3

Спасибо. Давно ищу метод очистки дисков от временных файлов на ПК в домене. Этот вопрос пока не гуглил, а можно ли создавать задания в планировщике через GPO? Тогда можно использовать один из этих скриптов или ccleaner с ключом /auto.

Ваша оценка: 0

IWS, это то же самое, что у equinox, просто код слегка другой.

А зачем? Поставьте в качестве логон/логофф скрипта и все.

Ваша оценка: +2

Доброго дня, всем!

после чего скопируйте все содержимое папки в %windir%\system32.

, по-моему здесь было бы правильно написать копируем папку CleanUp ,так как в Schdule.cmd указан путь: %WINDIR%\system32\cleanup
А в целом все такие же интересные и познавательные материалы, как и раньше, так держать!

Ваша оценка: 0

В schedule.cmd действительно написано

Но там нет слэша в конце, а это значит, что будет выполнен исполняемый файл с именем cleanup вне зависимости от его расширения.

Проверьте сами. Положите в System32 файл cleanup.bat

и выполните в командной строке

Ваша оценка: +3 Ваша оценка: 0

Возможно, они младше двух недель, ибо этот параметр задан в скрипте.

Спасибо за теплые пожелания! :)

Ваша оценка: +2

осталось только добавить что в пакете sysinternals есть маленькая утилита sdelete помогающая безвозвратно удалять файлы.

Ваша оценка: +2

SERG, для очистки временных файлов sdelete не нужна. Это, скорее, для укрепления конфиденциальности, что в домашних условиях не особо востребовано.

Ваша оценка: 0

Спасибо, взял на вооружение.
Хотелось бы узнать как можно настроить планировщик, что бы задание выполнялось при выключении или выходе из системы пользователя.

Ваша оценка: 0 Ваша оценка: 0 Ваша оценка: 0

Спасибо!
взял на вооружение. Но только добавил не в планировщик, а сделал ярлычок в Total CMD, поместив рядом с VBS для создания папки с именем даты и новым текстовиком)

Не подскажете, как можно сделать еще файлик для чистки дисков, скажем, убирать файлы .bak? Порой процедура очень нужная :)

Очень рад, что зайдя на OSZONE, я увидел ссылку сюда. Хороший блог, хоть многое и знакомо, но нравится как вы объясняете. Спасибо за труд!

Ваша оценка: +1

Что касается вашего вопроса про bak-файлы, то:
1. Определите список папок, в которых они создаются
2. Выполняйте для каждой папки команду forefiles.exe с ключом /m *.bak

Ваша оценка: 0 Ваша оценка: 0

Практически уже ничего не чищу. Поскольку всё временное находится в стандартных расположениях, раз в полгода захожу во встроенную очистку диска (за это время успевает скопиться 2,5-4GB мусора), удаляю.
Почему не чищу с фанатизмом? Всё предельно просто. HDD распределялся таким образом, чтобы на системном разделе оставался приличный запас свободного места. 4GB мусора никак на скорость работы не влияют.

Ваша оценка: +1

Morpheus, прямой зависимости между скоростью работы и наличием временных файлов нет. Но есть другие факторы, по которым я не считаю нужным держать на диске по 2-4 Гб мусора на протяжении полугода.

Для оптимальной производительности HDD нужно дефрагментировать, и чем больше мусора, тем дольше проходит этот процесс. Да, в Windows 7 он выполняется в фоне, поэтому незаметен. Однако дефрагментация этих файлов создает ненужную нагрузку на HDD, что теоретически сокращает его срок службы.

Да и вообще, зачем гонять мусор по диску, если его можно удалить :)

Ваша оценка: +1 Ваша оценка: 0

Подскажите, как удалять файлы из директории с исключением?
Пример:
Надо удалить все файлы и папки кроме одной папки.

Ваша оценка: +2 Ваша оценка: 0

Ну вы блин даётё

ППц.
Это не решение проблемы.
Во первых скрипт это фаил а значит он должен гдето лежать куда пользователь должен иметь доступ.
Во вторых в папку windir\temp орбычный юзер даже доступ может не имеет, ибо у него есть свой темп который лежит в %temp%.
В 3 папку %temp% планировщиком не очистить ибо планировщик выполняет задачи от имени, а не для текущего пользователя(вы же понимаете что у каждого юзера папка %temp% своя), тоесть запускать скрипт нуно во время Логона(ЛогОффа).

Вот раборчий вариант.
Просто добавить в групповые политики в пункт User Configuration\Police\Windows Settings\Scripts\LogOn
Рабаотет для XP и 7(для всех NT5 и NT6)

Годится! Согласны? +5

Какой проблемы? Скрипт полностью справляется с задачей, отраженной в заголовке и содержании статьи.

То же самое можно сказать и про ваш скрипт :)

В статье не было ничего сказано про %WinDir%\Temp, но при запуске из планировщика с максимальными правами все будет работать, если пользователь обладает правами админа.

Годится! Согласны? +6

%AllUsersProfile%\Application Data\Microsoft\Dr Watson
%Windir%\minidump
%SystemRoot%\Memory.dmp
1.Удалить только те %Windir%/$NtUninstallКБ Номер$-папки, созданные более месяца назад, как создать резервную копию файлы обновлений Windows. Не следует удалять те, которые были созданы за последние 30 дней.
2.Чтобы удалить кэш загрузки обновлений Windows, удалите все папки в папке %Windir%\SoftwareDistribution\download, которые были создано более 10 дней назад.
3.Удалите следующие файлы журнала в папке % Windir %:
KB*.log
Setup*.log
Setup*.old
SetupLog.txt
файле Winnt32.log
SET*.tmp
1.Удалите папку %Windir%\$NtServicePackUninstall$ на Удалите папки резервного копирования для пакетов обновления для Windows XP.
2.Удалить папку % windir%\ServicePackFiles для удаления установочные файлы и папки кэша для службы Windows XP пакеты обновления.
Нашёл вас через oszone
А так же, как удалить всё из папки профиля пользователей, работающих за 1 пк файлы по маске и старше n дней из заданной папки или удалить папку по маске и старше n дней, пример: удалить всё для пользователь1 и пользователь2 из C:\Documents and Settings\пользователь1\del\*.* и C:\Documents and Settings\пользователь2\del\*.* или саму папку del (маска), если она старше n дней, выполять надо в не зависимости от того, какой пользователь работает с пк?

Ваша оценка: 0

В конце записи есть ссылка на тему в форуме по скриптам, обратитесь туда, плиз.

Ваша оценка: 0

Вадим, а можно в этом запросе

сделать так чтобы оставалась 1 (последняя) копия не зависимо от даты. Это мне нужно, на случай сбоя резервного копирования т.к. этой командой я удаляю старые резервные копии.

Ваша оценка: 0 Ваша оценка: +1 Ваша оценка: 0

Андрей, я понятия не имею, как в VBS обрабатываются пути с кириллицей. Спросите в указанной теме форума.

Но ничто не мешает вам использовать forfiles, сохранив скрипт в кодировке OEM.

Ваша оценка: 0

Это все понятно, а вот можно изменит скриптом адрес который находится по умолчанию в %TEMP% например на D:\temp

Ваша оценка: 0 Ваша оценка: 0

А можно в данный скрипт внести изменении чтобы не удалялись пара каталогов с данными из этой папки?

Ваша оценка: 0 Ваша оценка: 0

Спасибо. Не обратил внимания.

Ваша оценка: 0

Подскажите как автоматизировать очистку папки AppData/Temp в профиле пользователя, чтобы удалялось из папки всё . У меня ничего не получается.

Ваша оценка: 0

Сергей, а что конкретно вы сделали, что у вас ничего не получается?

Ваша оценка: 0 Ваша оценка: 0

Сергей, слэши в путях неправильные. C:\users\ надо.

Ваша оценка: 0

Скажите нет ли способа чистить папку tmp на хостинге , после установки плагинов и тп. она засоряется а в ручную долго это делать?

Ваша оценка: 0

Вячеслав, очевидно, надо запускать какой-то скрипт на сервере, на котором крутится ваш сайт :)

Ваша оценка: 0

это понятно , думал вы можете скрипт посоветовать , ну даладно.

Ваша оценка: 0

Вячеслав, как я могу советовать скрипт, если я даже не знаю ОС, под управлением которой работает сервер? :) Для Windows вы скрипт уже знаете, гуд лак!

Ваша оценка: 0 Ваша оценка: 0 Ваша оценка: 0 Ваша оценка: 0

Антон, даже если вы не владеете CMD, можно погуглить

Ваша оценка: 0

Использую скрипт VBS для очистки от временных файлов; но вот что раздражает так это то, что при выполнении файлика CleanUp.cmd с двумя командами запуска скриптов для чистки пользовательского и системного TEMP каталогов на доли секунд появляется и исчезает черное окно интерпретатора команд. Можно каким либо способом сделать чтобы это окно не появлялось ?

Ваша оценка: 0

Можно запуск скрипта предварять start /min …

Ваша оценка: 0

Использую данную команду для автоматического удаления файлов внутри своей временной папки. Удаляет хорошо, однако после работы основной программы остается не только файл temp но и log. Расширения нет и данный скрипт на нем спотыкается. Как обойти?
Заранее спасибо.

Ваша оценка: 0 Ваша оценка: 0

Вадим, речь идет об команде:

Ваша оценка: 0

Сергей, речь о том, что запросы на изменение скрипта нужно направлять в форум.

Авторизуясь в LiveJournal с помощью стороннего сервиса вы принимаете условия Пользовательского соглашения LiveJournal

Утилита для удаления файлов по маске из дерева каталогов

Давненько не постил исходников. Вот.. :)
Если кто знает штатную команду MS Windows для такой операции - напишите :)
Такие посты вообще никому не нужны? :)

  • Музыка: Nightwish - Sacrament Of Wilderness (live)
иногда бывает полезно запустить del /?
можно узнать много нового
к примеру:
/S Delete specified files from all subdirectories.
Пример использования:
del d:\temp\*.bak /S
только хотел набрать del /?, как уже оказывается за меня сделали ))) ещё некоторые пишут программу для склейки файлов, увидев второго такого человека, пришлось всё-таки запустить copy /? для проверки возникшей теории =)

Копирование одного или нескольких файлов в другое место.

COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/A | /B] источник [/A | /B]
[+ источник [/A | /B] [+ . ]] [результат [/A | /B]]

источник Имена одного или нескольких копируемых файлов.
/A Файл является текстовым файлом ASCII.
/B Файл является двоичным файлом.
/D Указывает на возможность создания зашифрованного файла
результат Каталог и/или имя для конечных файлов.
/V Проверка правильности копирования файлов.
/N Использование, если возможно, коротких имен при копировании
файлов, чьи имена не удовлетворяют стандарту 8.3.
/Y Подавление запроса подтверждения на перезапись существующего
конечного файла.
/-Y Обязательный запрос подтверждения на перезапись существующего
конечного файла.
/Z Копирование сетевых файлов с возобновлением.

Ключ /Y можно установить через переменную среды COPYCMD.
Ключ /-Y командной строки переопределяет такую установку.
По умолчанию требуется подтверждение, если только команда COPY
не выполняется в пакетном файле.

Чтобы объединить файлы, укажите один конечный и несколько исходных файлов,
используя подстановочные знаки или формат "файл1+файл2+файл3+. ".

Как мы уже говорили, В VBS для работы с файловой системой существует FileSystemObject.

При помощи FSO можно работать с папками. Алгоритм начала работы такой:

1. Объявляем переменную. Не обязательно такое же название, но оно наиболее логичное. А ещё, ваш код будет понятнее для других.

Dim FSO

2. Записываем в переменную FSO копию объекта FileSystemObject, который предназначен для работы с файловой системой Windows

3. Получаем доступ к папке в переменной fold

А теперь давайте посмотрим, что мы можем сделать с папками?

А так же непосредственно с FSO:

Коллекция SubFolders

Set subfold = f.SubFolders

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

SubFolders

Давайте разберёмся поподробнее. Итак, вводим путь в переменную Path. Далее в переменную FSO копируем объект FileSystemObject(строка2). Далее при условии, что путь существует(строка 4, FolderExists) мы в переменную oFolders получаем доступ к папке по указанному пути(строка 5). Далее мы в переменную oSubFolders получаем коллекцию SubFolders в переменную oSubFolders(строка 6). Далее мы начинаем цикл For Each для каждого элемента, названного нами item в коллекции oSubFolders(та самая переменная, куда мы полуили коллекцию SubFolders) в строке 7. В 8 строке кода мы добавляем к переменной TEMP название папки(item.Name) и выполняем переход на след.строку(chr(13)).

Если каталога не существует, то в переменную TEMP заносится об этом строчка(строка 11). Ну выводим результат в 14 строчке кода. Вот, примерно так и происходит работа с коллекцией.

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

В прошлом случае, для переменной с коллекцией oSubFolders можно было применить: oSubFolders.count

Это бы нам вернуло количество элементов коллекции.

Вот, вроде бы и всё. Далее будем разбирать задачи. Но прежде, я хотел бы ещё привести 1 полезную штуку, правда не из FSO. Хотел бы её заранее объяснить, чтобы не возникло вопросов.

Path = objTree.Self.Path
Name = objTree.Self.name

Работа конструкции такова: Создаётся копия объекта в переменную oShell. Далее при помощи метода BrowseFolFolder вызывается окно поиска папки. Первое значение 0 должно быть нулём, далее идёт текст. Далее метод, по которому будет выполнятся отображение, и путь, от которого будет идти поиск. Выше этого пути выйти будет нельзя.

Приведём список методов отображения:

Путь может быть задан и численно. Вот список возможных значений:
DESKTOP = 0
PROGRAMS = 2
DRIVES = 17
NETWORK = 18
NETHOOD = 19
PROGRAMFILES = 38
PROGRAMFILESx86 = 48
WINDOWS = 36

Итак, теперь задачи.

ЗАДАЧА 1 : Компьютер на любом из существующем локальном диске компьютера ищет произвольную папку и выстраивает произвольной длинны папку. После чего, выдаёт всю информацию по данной папке.

Код довольно большой, поэтому разобьём его на несколько блоков:

Folder zadacha

Итак, создаём объект FSO, запускаем генератор случайных чисел. Далее расписываем функции(далее на каждой остановимся). Нам нужно сделать 3 разные вещи: Выбрать локальный диск компьютера(первая функция, строки 5-14), Раскрыть каталог и выбрать там ещё каталог(вторая функция, 16-32) и Вывести информацию по каталогу(третья функция, 34-42). Прежде чем мы вернёмся к основному коду давайте рассмотрим работу функций и поймём, как они устроены у нас.

Итак, выбор локального диска на компьютере:

Выбор папки

Теперь, вернёмся к основному коду:

Ну и в самом конце мы выводим получившийся путь Path и выводим значение функции FoldInf по полученному пути Path.

Читайте также: