Я не знаю каких-либо надстроек Explorer, но, как и большинство вещей в Windows, это можно сделать с помощью PowerShell:
ForEach ($Drive in Get-PSDrive -PSProvider FileSystem) {
$Path = $Drive.Name + ':\$Recycle.Bin'
Get-ChildItem $Path -Force -Recurse -ErrorAction SilentlyContinue |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
Remove-Item -Recurse
}
Сохраните этот скрипт как текстовый файл с расширением .ps1
. Затем вы можете использовать планировщик заданий, чтобы запускать его через регулярные промежутки времени.
Однако сначала необходимо разрешить выполнение сценариев PowerShell, поскольку по умолчанию вы можете выполнять только те команды, которые введены непосредственно в приглашение PowerShell. Для этого откройте PowerShell и введите следующую команду:
Set-ExecutionPolicy RemoteSigned
При появлении запроса введите "y" или "yes". См. Get-Help Set-ExecutionPolicy
для получения дополнительной информации.
Теперь откройте планировщик заданий и создайте новое задание со следующими параметрами:
- На вкладке "Общие" введите имя и установите флажок "Запускать с наивысшими привилегиями".
- На вкладке "Триггеры" добавьте новый триггер и настройте задачу на ежедневное выполнение.
- На вкладке "Действия" добавьте новое действие:
- оставьте тип как "Запустить программу"
- установите в поле «Программа / скрипт» значение
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
- установите поле "Добавить аргументы" в
-NonInteractive -File "C:\path\to\script.ps1"
- На вкладке "Условия" снимите флажок «Запускать задачу, только если компьютер подключен к сети переменного тока».
Пошаговое объяснение сценария:
ForEach ($Drive in Get-PSDrive -PSProvider FileSystem) {
Это получает список всех дисков в компьютере и проходит через них один за другим. Параметр -PSProvider FileSystem
требуется только для возврата дисководов, поскольку PowerShell также имеет псевдоприводы для различных других вещей, таких как кусты реестра.
Для получения дополнительной информации см. Get-Help Get-PSDrive
и это руководство по обработке циклов в PowerShell.
$Path = $Drive.Name + ':\$Recycle.Bin'
Это создает путь к папке корзины на текущем диске. Обратите внимание на использование одинарных кавычек вокруг второй части, чтобы PowerShell не интерпретировал $Recycle
как переменную.
Get-ChildItem $Path -Force -Recurse -ErrorAction SilentlyContinue |
Это возвращает все файлы и подпапки по заданному пути (тот, который мы создали с помощью предыдущей команды). Параметр -Force
необходим для перехода в скрытые и системные папки, а параметр -Recurse
делает команду рекурсивной, т.е. цикл через все подкаталоги, а также. -ErrorAction
является стандартным параметром для большинства команд PowerShell, а значение SilentlyContinue
заставляет команду игнорировать ошибки. Целью этого является предотвращение ошибок для дисков, которые были настроены на немедленное удаление файлов. |
символ в самом конце передает результаты к следующей команде; Я разделил его на несколько строк для лучшей читаемости.
Для получения дополнительной информации см. Get-Help Get-ChildItem
.
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
Это просто фильтрует результаты предыдущей команды и возвращает только те, которые старше 30 дней. $_
относится к объекту, обрабатываемому в данный момент, а свойство LastWriteTime
в этом случае относится к дате и времени, когда файл был удален. Get-Date
возвращает текущую дату.
Для получения дополнительной информации см. Get-Help Where-Object
и Get-Help Get-Date
.
Remove-Item -Recurse
Это просто удаляет элементы, переданные ему предыдущей командой. Параметр -Recurse
автоматически удаляет содержимое непустых подпапок; без этого вам будет предложено для таких папок.
Для получения дополнительной информации см. Get-Help Remove-Item
.