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

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

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

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

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

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

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

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

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

  4. Windows Search мгновенно отфильтрует результаты. Выберите файлы, которые вы хотите удалить, и нажмите клавишу Delete на клавиатуре.

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

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

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

 дата изменения: 01.01.2017 .. 31.12.2017 

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

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

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

 datemodified: <11/1/2017 

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

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

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


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

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

 Справка по файлам - Переключатели командной строки / P - Указывает путь для начала поиска. Папкой по умолчанию является текущий рабочий каталог (.). / S - Указывает, что файлы должны переходить в подкаталоги. Как "DIR / S". / D - Выбрать файлы с датой последнего изменения. Например, -365 означает более года назад, -30 означает месяц назад. / C «команда» - указывает команду для выполнения для каждого файла. Командные строки должны быть заключены в двойные кавычки. По умолчанию используется команда «cmd / c echo @file». В командной строке можно использовать следующие переменные: @file - возвращает имя файла. @fname - возвращает имя файла без расширения. @ext - возвращает только расширение файла. @path - возвращает полный путь к файлу. @relpath - возвращает относительный путь к файлу. @isdir - возвращает «ИСТИНА», если тип файла является каталогом, и «ЛОЖЬ» для файлов. @fsize - возвращает размер файла в байтах. @fdate - возвращает дату последнего изменения файла. @ftime - возвращает время последнего изменения файла. 

Чтобы просмотреть весь список аргументов командной строки, поддерживаемых этим инструментом, введите 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" 

Выше предполагается, что путь к папке - 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" 

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

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

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

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

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


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

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

 При ошибке Возобновить Далее Установить oFileSys = WScript.CreateObject ("Scripting.FileSystemObject") sRoot = "C: \ Path To Old Files" 'Корень пути для поиска файлов сегодня = Дата nMaxFileAge = 3' Файлы старше этого (в днях) будут удалены DeleteFiles (sRoot) Функция DeleteFiles (ByVal sFolder) Установите oFolder = oFileSys.GetFolder (sFolder) Установите aFiles = oFolder.Files Установите aSubFolders = oFolder.SubFolders Для каждого файла в aFiles dFileCreated = FormatDateTateTateTate ) If DateDiff ("d", dFileCreated, today)> nMaxFileAge Then file.Delete (True) End If Next для каждой папки в aSubFolders DeleteFiles (folder.Path) Next End Функция 

Источник: Удалить старые файлы и пустые подпапки - Центр сценариев - 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 -Путь "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 Переключатель | Remove-Item .

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

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

Чтобы -ErrorAction SilentlyContinue отображение сообщений об ошибках (при доступе к элементам или их удалении) в консоли, добавьте параметр -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 : Параметр -Recurse указывает PowerShell для рекурсивного получения файлов (в подкаталогах). Чтобы предотвратить поиск файлов во вложенных папках, удалите параметр -Recurse чтобы обрабатывать только текущую папку.

ПОХОЖИЕ СТАТЬИ