Windows Удаление временных файлов скриптом по расписанию

Тема в разделе "FAQ по Microsoft Windows", создана пользователем Mila, 6 июн 2011.

  1. Mila
    Оффлайн

    Mila Команда форума Основатель

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

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

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

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

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


    CMD

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


    Нажмите меню "Пуск"=>Введите cmd => По найденному объекту кликните правой кнопкой мыши и выберите пункт Запустить с правами администратора"
    Введите команду и нажмите enter:

    Код (Text):
    forfiles.exe /p %temp% /s /m *.* /d -14 /c "cmd /c del /q /f @file"
    -Вместо %temp% (временной папки в профиле) подставьте свою папку (параметр /p)
    -Возраст файлов по умолчанию 14 дней (параметр /d), но вы можете задать любое значение
    -Можно удалять файлы определенного расширения по маске (например, /m *.log)
    За рекурсивное удаление (во вложенных папках) отвечает параметр /s

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

    VBS

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


    Код (Text):
    On Error Resume Next
    intDays = Int(Wscript.arguments.Item(0))
    strFldr = Wscript.arguments.Item(1)
     
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    DelOld strFldr, intDays
     
    Function DelOld(sFldr, iDays)
    On Error Resume Next
       Dim oD, cF, cD, oI
     
       Set oD = objFSO.GetFolder(sFldr)
       Set cF = oD.Files
       Set cD = oD.SubFolders
     
       For Each oI In cF
          If DateDiff("d", oI.DateLastModified, Now) > iDays Then
             WScript.Echo oI.Path
             oI.Attributes = 0
             oI.Delete
          End If
       Next
     
       For Each oI In cD
          DelOld oI.Path, iDays
          If oI.Size = 0 Then
             oI.Attributes = 0
             oI.Delete
          End If
       Next
    End Function
     
    -Файлы удаляются по дате изменения. Чтобы удалять по дате создания, замените .DateLastModified на .DateCreated
    -Если не хотите удалять защищенные файлы, закомментируйте строку
    Код (Text):
    ‘ oI.Attributes = 0
     
    Команда для выполнения

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

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

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


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

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

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

    Код (Text):
    Schtasks.exe /Create /RL Highest /TN CleanUP /SC Weekly  /D SUN /ST 14:00 /TR "%WINDIR%\system32\cleanup.cmd"
    Задание с именем CleanUp будет выполняться:

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

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

    [​IMG]

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


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

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

    2.Щелкните правой кнопкой мыши на файле schedule.cmd и выберите Запуск от имени администратора, чтобы создать задание.



    Автор: Вадим Стеркин



    источник
     
    Последнее редактирование модератором: 8 фев 2013
    Guest, Dragokas, Kиpилл и ещё 1-му нравится это.

Поделиться этой страницей