Видалення тимчасових файлів скриптом за розкладом - Вадим Стеркиной
Як ви видаляєте тимчасові файли? Вручну запускаєте CCleaner або аналогічну програму, або налаштували її запуск за розкладом? Я обходжуся вбудованими засобами Windows, причому все зводиться буквально до однієї команди. Я хочу поділитися з вами двома скриптами, які давно служать мені вірою і правдою для видалення непотрібних файлів.
У Windows є утиліта для очищення диска, яку можна налаштувати для видалення заданих категорій файлів за розкладом . Вона легко впорається з очищенням тимчасових файлів з розташувань, відомих системі, але не дозволить видаляти непотрібні файли з заданої вами папки. За допомогою скриптів можна очищати не тільки тимчасові файли, але і будь-яку папку. Наприклад, я видаляю файли з папок Test і Temp, які служать для експериментів і тимчасового зберігання файлів як в завантаженнях, так і документах.
На відміну від програмних чистильників, скрипти можна гнучко налаштувати, а регулярність виконання очищення легко реалізувати за допомогою планувальника завдань Windows.
Ці скрипти дозволяють видаляти тільки файли заданого «віку» замість повного очищення папки.
У статті ви знайдете приклади скриптів і розповідь про те, як налаштувати завдання в планувальнику однією командою. Ви також зможете скачати готові файли і створити завдання для очищення папок за пару хвилин.
скрипти
Ви можете скористатися на вибір скриптами CMD, VBS і PowerShell.
CMD
Можна використовувати утиліту командного рядка forfiles.exe, що входить до складу Windows 7 і новіше (колись вона входила в Windows 2000 Resource Kit ). Однією командою видаляються всі файли з вказаної папки і вкладених в неї.
Команда для виконання
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 видаляє всі файли і папки, включно із захищеними, з висновком списку віддалених файлів.
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
- Якщо не хочете видаляти захищені файли, закоментуйте рядок
'OI.Attributes = 0
Команда для виконання
Скрипт можна запускати з командного файлу (CMD).
cscript // Nologo MyCleanUp.VBS 14% windir% \ temp> MyCleanupScript.Log
- Замість% windir% \ temp підставте свою папку (в цьому прикладі видаляються файли з тимчасової папки в системному каталозі)
- Вік файлів за замовчуванням 14 днів, але ви можете задати будь-яке значення
- Список віддалених файлів буде за замовчуванням збережений у файлі% windir% \ system32 \ MyCleanupScript.Log, хоча можна вказати будь-який шлях і ім'я файлу
Як і у випадку з утилітою forefiles.exe, можна реалізувати очистку різних папок, вказавши кожну в окремій команді.
PowerShell
Скрипт на PowerShell був в блозі Сергія Мареничів в рамках уроку про операції з файлами, але тепер сторінка доступна тільки в архіві інтернету . Я скопіював ключове вміст для вас:
# З заданої папки видаляти всі файли і папки старше 14 днів $ Path = "C: \ temp" $ Days = "-14" $ CurrentDate = Get-Date $ OldDate = $ CurrentDate.AddDays ($ Days) Get-ChildItem $ Path -Recurse | Where-Object {$ _. LastWriteTime -lt $ OldDate} | Remove-Item
Запуск скрипта:
powershell.exe -ExecutionPolicy Bypass -noprofile -file Script.ps1
Виконання очищення за розкладом
Для виконання очищення папки за розкладом потрібно створити скрипт з ім'ям cleanup.cmd, що містить команду для запуску, і скопіювати його в будь-яку папку з PATH (наприклад,% windir% \ system32). Помістіть туди ж скрипт VBS або PowerShell, якщо ви вирішили використовувати його, а не утиліту forfiles.ехе.
Завдання за розкладом створюється однією командою:
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.
збільшити малюнок
Можете перевірити роботу завдання в планувальнику. Для цього клацніть правою кнопкою миші по завданню і виберіть Виконати.
готові файли
завантажте архів і розпакуйте в будь-яку папку. В архіві варіанти forfiles і VBS.
- Задайте шлях до папки і вік файлів в скрипті CleanUp.cmd в одній з папок (кожна відповідає одному з описаних вище способів), після чого скопіюйте весь вміст папки в% windir% \ system32.
- Клацніть правою кнопкою миші на файлі schedule.cmd і виберіть Запуск від імені адміністратора, щоб створити завдання.
Подяки
Авторами скриптів, які я коли-то чого почерпнув від цієї теми конференції OSZone, є Keeper2006 і amel27 відповідно. У цій же темі ви знайдете інші цікаві варіанти вирішення даного завдання, і туди ж слід направляти питання по доопрацюванню скриптів під свої потреби.
А як ви рятуєтеся від непотрібних файлів - програмою або скриптом? Настроєна у вас очищення за розкладом?
Обговорення завершено.
Вручну запускаєте CCleaner або аналогічну програму, або налаштували її запуск за розкладом?А як ви рятуєтеся від непотрібних файлів - програмою або скриптом?
Настроєна у вас очищення за розкладом?