Как автоматически удалять файлы старше N дней в Windows

Windows 10 имеет встроенные функции для освобождения места путем удаления старых файлов в %temp% каталог и Downloads папки. В настройках Windows 10 есть опция («Хранилище»), которая автоматически удаляет временные файлы, которые не используются вашими приложениями, файлы в загрузках, которые не были изменены в течение последних x дней, или файлы, хранящиеся в корзине в течение x дней.

Параметры очистки настроек хранилища Windows 10

Кроме того, инструмент очистки диска очищает файлы в %temp% каталог, к которому не обращались в течение последних 7 дней.

Однако параметры очистки диска и хранилища предназначены только для %temp% а также Downloads папки. Чтобы удалить файлы, которые старше определенного количества дней, в «пользовательской» папке, например Documents папку, вам нужно использовать один из этих трех методов:

Как автоматически удалять файлы старше N дней в Windows

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

Способ 1. Удалите файлы старше «N» дней с помощью проводника

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

  1. Откройте папку, в которой вы хотите удалить старые файлы.
  2. Нажмите на поле поиска или нажмите кнопку F3 на клавиатуре.
  3. Нажмите кнопку «Дата изменения» и выберите один из раскрывающихся вариантов, например «Последняя неделя».
    удалить файлы старше чем х дней в Windows
  4. Windows Search отфильтрует результаты мгновенно. Выберите файлы, которые вы хотите удалить, и нажмите клавишу Delete на клавиатуре.

Важный: По умолчанию Windows выполняет поиск файлов в текущей папке и во всех подпапках. Чтобы ограничить поиски только текущая папка, нажмите кнопку «Текущая папка» на панели инструментов поиска / на ленте.

Расширенный поиск Запрос: «Дата» Операторы

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

datemodified:1/1/2017 .. 12/31/2017

Это находит файлы, которые были изменены в течение указанного диапазона дат. Вы также можете использовать datecreated: dateaccessed: или date: (особенно для изображений с камеры) операторов. Обратите внимание, что date: Оператор использует метаданные даты (EXIF), записанные камерой.

СВЯЗАННЫЙ: Как искать файлы, созданные между двумя датами в Windows

Чтобы найти файлы, которые не были изменены после 1 ноября 2017 года, используйте меньше чем (<) символ с datemodifed: оператор, как показано ниже:

datemodified:‎<11/1/‎2017

удалить файлы старше чем х дней в Windows

Выберите файлы из списка и удалите их.

Чаевые: Вместо того, чтобы вводить диапазон дат вручную, введите datemodified: или datecreated: или dateaccessed: или date: оператор в поле поиска, и пусть File Explorer покажет вам выбор даты. Затем вы можете выбрать дату или диапазон дат из всплывающего окна. Чтобы указать диапазон дат, выберите первую дату и перетащите курсор в соответствующее поле.

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

Способ 2: удаление файлов старше, чем N дней с использованием командной строки

ForFiles Консольный инструмент (в Windows 7, Windows 8, Windows 8.1 и Windows 10) выбирает файл или набор файлов и выполняет команду для этого файла или набора файлов.

Forfiles Help -- Command-line switches
/P - Indicates the path to start searching. The default folder is the current working directory (.).
/S - Instructs forfiles to recurse into subdirectories. Like "DIR /S".
/D - Select files with a last modified date. For example,-365 means over a year ago, -30 means a month ago.
/C "command" - Indicates the command to execute for each file. Command strings should be wrapped in double quotes.
The default command is "cmd /c echo @file".
The following variables can be used in the command string:
@file - returns the name of the file.
@fname - returns the file name without extension.
@ext - returns only the extension of the file.
@path - returns the full path of the file.
@relpath - returns the relative path of the file.
@isdir - returns "TRUE" if a file type is
a directory, and "FALSE" for files.
@fsize - returns the size of the file in bytes.
@fdate - returns the last modified date of the file.
@ftime - returns the last modified time of the file.

Чтобы просмотреть весь список аргументов командной строки, поддерживаемых этим инструментом, введите FORFILES /? в командной строке.

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

ForFiles /p "D:\My Scripts" /s /d -30 /c "cmd /c del @path"

-или-

ForFiles /p "D:\My Scripts" /s /d -30 /c "cmd /c del @file"

удалить файлы старше x дней в Windows forfiles.exe команда forfiles

Выше предполагается, что путь к папке D:\My Scripts и вы хотите удалить файлы старше 30 дней. Настройте путь к папке и количество дней в соответствии с вашими потребностями.

Вы не увидите выходного сообщения, если команда выполнена успешно. Если ни один файл не соответствует указанным критериям, вы увидите сообщение ОШИБКА: не найдено файлов с указанными критериями поиска.

Дополнительный совет: Чтобы выполнить пробный прогон перед попыткой удаления файлов, чтобы проверить, какие файлы подвержены указанным критериям, замените команду del с echo, как показано ниже:

ForFiles /p "D:\My Scripts" /s /d -30 /c "cmd /c echo @path"

-или-

ForFiles /p "D:\My Scripts" /s /d -30 /c "cmd /c echo @file"

forfiles удалить старые файлы x days echo

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

Запустите команду автоматически с помощью планировщика заданий

  1. Запустите планировщик задач.
  2. В планировщике заданий нажмите «Библиотека планировщика заданий»
  3. Нажмите ссылку «Создать задачу» на правой панели.
  4. В диалоговом окне «Создать задачу» выберите вкладку «Общие».
  5. Упомяните название задачи, скажем «Удалить старые файлы в Моих документах»
  6. Перейдите на вкладку «Триггеры» и нажмите «Создать».
  7. Выберите «По расписанию» в раскрывающемся списке под раскрывающимся списком «Начать задачу».
  8. Вы можете запускать задачу ежедневно, еженедельно или ежемесячно. Если вы выбираете еженедельно, выберите дни недели, когда вы хотите запускать задачу.
  9. После этого нажмите кнопку ОК.
  10. Перейдите на вкладку «Действия» и нажмите кнопку «Создать…».
  11. В окне «Новое действие» заполните следующее:
    Action: Start a program
    Program/script: C:\Windows\System32\ForFiles.exe
    Add arguments (optional): /p "%userprofile%\Documents" /s /d -30 /c "cmd /c del @file"

    удалить файлы старше x дней в планировщике задач Windows

  12. Нажмите ОК.

Создается новая задача, которая при запуске удаляет файлы в вашем Documents папка, которая не была изменена за последние 30 дней.

Способ 3: удалить файлы старше N дней с помощью скрипта

Пользователи форума Spiceworks имеют VBScripts, которые могут рекурсивно удалять файлы старше N дней по указанному пути к папке. Вот простой скрипт:

On Error Resume Next
Set oFileSys = WScript.CreateObject("Scripting.FileSystemObject")
sRoot = "C:\Path To Old Files"			'Path root to look for files
today = Date
nMaxFileAge = 3					'Files older than this (in days) will be deleted
DeleteFiles(sRoot)
Function DeleteFiles(ByVal sFolder)
Set oFolder = oFileSys.GetFolder(sFolder)
Set aFiles = oFolder.Files
Set aSubFolders = oFolder.SubFolders
For Each file in aFiles
dFileCreated = FormatDateTime(file.DateCreated, "2")
If DateDiff("d", dFileCreated, today) > nMaxFileAge Then
file.Delete(True)
End If
Next
For Each folder in aSubFolders
DeleteFiles(folder.Path)
Next
End Function

Источник: Удалить старые файлы и пустые подпапки - Центр сценариев - Spiceworks

ВАЖНЫЙ!Приведенный выше скрипт учитывает свойство «Дата создания» элементов вместо «Дата последнего изменения». Если вы хотите удалить файлы, которые не были модифицированный за последние N дней измените следующую строку в скрипте:

dFileCreated = FormatDateTime(file.DateCreated, "2")

в

dFileCreated = FormatDateTime(file.DateLastModified, "2")

Он очищает файлы старше 3 дней. Все, что вам нужно сделать, это изменить путь к папке Максимальные параметры возраста файла, как требуется в сценарии, сохраните его с .vbs расширение и запустить его. Обратите внимание, что скрипт работает с указанными папками и подпапками рекурсивно.

Вот еще один скрипт, который удаляет файлы старше N дней и автоматически рекурсивно очищает пустые подпапки. См. Удаление файлов старше максимального возраста (в днях) - Центр сценариев - Spiceworks

СВЯЗАННЫЙ: Как быстро находить и удалять пустые папки в Windows

Способ 4: удаление файлов старше n дней с помощью PowerShell

Третий вариант - использовать PowerShell, который имеет полезный командлет для поиска и удаления старых файлов.

Запустить PowerShell (powershell.exe)и введите следующую команду:

Get-ChildItem -Path [folder_path] -File -Recurse -Force | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-30))}| Remove-Item  -Force

Пример:

Get-ChildItem -Path "D:\Reports" -File -Recurse -Force | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-30))}| Remove-Item  -Force

Использовать пути, содержащие переменную окружения, например %userprofile%\documentsиспользуйте синтаксис ниже:

Get-ChildItem -Path "$env:userprofile\documents" -File -Recurse -Force | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-30))}| Remove-Item -Force

(Заметка: Имя папки в примере соответствует вашему профилю пользователя. Documents папки. Измените имя и путь к папке соответственно вашим потребностям.)

Так как мы использовали -File параметр, он работает только для файлов. Таким образом, папки, которые не были записаны за последние n дней, не могут быть удалены.

Указанная команда состоит из трех частей:

  1. Get-ChildItem Командлет получает список файлов в папке «Документы».
  2. Затем вывод передается в Where-Object Командлет, чтобы выполнить фильтрацию, выбирая только файлы, которые не были изменены в последнем x количество дней (в этом примере 30 days).
  3. Наконец, мы передаем вывод в Remove-Item командлет, который, в свою очередь, удаляет те старые файлы, которые были возвращены предыдущими двумя командлетами.

Совет 1: список подходящих файлов, не удаляете их?

Чтобы вывести список подходящих файлов и папок, не удаляя их, | Remove-Item переключатель.

Get-ChildItem -Path [folder_path] -File -Recurse -Force | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-30))}

Совет 2: подавление ошибок при удалении элементов

Чтобы запретить отображение сообщений об ошибках (при доступе к элементам или их удалении) в консоли, добавьте -ErrorAction SilentlyContinue параметр.

Get-ChildItem -Path [folder_path] -File -Recurse -Force | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-30))} | Remove-Item -ErrorAction SilentlyContinue -Force

Удалить старые файлы, а также папки

Обратите внимание, что приведенные выше команды удаляют только старые файлы, но не подпапки, которые не были записаны в последнем x дней. Чтобы удалить старые папки, бросьте -File аргумент в из ранее объясненных команд.

Пример:

Get-ChildItem -Path "$env:userprofile\documents" -Recurse -Force | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-30))}| Remove-Item -Force

(См. Документацию по командлетам Get-ChildItem на сайте Microsoft)

Важный: -Recurse параметр указывает PowerShell рекурсивно получать файлы (в подкаталогах). Чтобы предотвратить поиск файлов в подпапках, удалите -Recurse опция, так что обрабатывается только текущая папка.

Ссылка на основную публикацию