Windows 10 имеет встроенные функции для освобождения места путем удаления старых файлов в %temp%
каталог и Downloads
папки. В настройках Windows 10 есть опция («Хранилище»), которая автоматически удаляет временные файлы, которые не используются вашими приложениями, файлы в загрузках, которые не были изменены в течение последних x дней, или файлы, хранящиеся в корзине в течение x дней.
Кроме того, инструмент очистки диска очищает файлы в %temp%
каталог, к которому не обращались в течение последних 7 дней.
Однако параметры очистки диска и хранилища предназначены только для %temp%
а также Downloads
папки. Чтобы удалить файлы, которые старше определенного количества дней, в «пользовательской» папке, например Documents
папку, вам нужно использовать один из этих трех методов:
Как автоматически удалять файлы старше N дней в Windows
Некоторые из методов, приведенных ниже, позволяют использовать свойство «дата создания» или «дата изменения» файлов в качестве базового уровня для определения «старых» файлов в соответствии с вашими потребностями.
Способ 1. Удалите файлы старше «N» дней с помощью проводника
Используя Windows Search, вы можете легко получить список файлов на основе выбранного диапазона дат или файлов старше определенной даты.
- Откройте папку, в которой вы хотите удалить старые файлы.
- Нажмите на поле поиска или нажмите кнопку F3 на клавиатуре.
- Нажмите кнопку «Дата изменения» и выберите один из раскрывающихся вариантов, например «Последняя неделя».
- Windows Search отфильтрует результаты мгновенно. Выберите файлы, которые вы хотите удалить, и нажмите клавишу Delete на клавиатуре.
Важный: По умолчанию Windows выполняет поиск файлов в текущей папке и во всех подпапках. Чтобы ограничить поиски только текущая папка, нажмите кнопку «Текущая папка» на панели инструментов поиска / на ленте.
Расширенный поиск Запрос: «Дата» Операторы
Если предустановленный диапазон дат вам не подходит, вы можете ввести собственный поисковый запрос. В поле поиска введите следующее, чтобы отфильтровать файлы из настраиваемого диапазона дат:
datemodified:1/1/2017 .. 12/31/2017
Это находит файлы, которые были изменены в течение указанного диапазона дат. Вы также можете использовать datecreated:
dateaccessed:
или date:
(особенно для изображений с камеры) операторов. Обратите внимание, что date:
Оператор использует метаданные даты (EXIF), записанные камерой.
СВЯЗАННЫЙ: Как искать файлы, созданные между двумя датами в Windows
Чтобы найти файлы, которые не были изменены после 1 ноября 2017 года, используйте меньше чем (<
) символ с datemodifed:
оператор, как показано ниже:
datemodified:<11/1/2017
Выберите файлы из списка и удалите их.
Чаевые: Вместо того, чтобы вводить диапазон дат вручную, введите 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"
Выше предполагается, что путь к папке 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"
При желании вы можете создать командный файл с помощью приведенной выше команды. Или для автоматического запуска команды с заданными интервалами с помощью планировщика заданий.
Запустите команду автоматически с помощью планировщика заданий
- Запустите планировщик задач.
- В планировщике заданий нажмите «Библиотека планировщика заданий»
- Нажмите ссылку «Создать задачу» на правой панели.
- В диалоговом окне «Создать задачу» выберите вкладку «Общие».
- Упомяните название задачи, скажем «Удалить старые файлы в Моих документах»
- Перейдите на вкладку «Триггеры» и нажмите «Создать».
- Выберите «По расписанию» в раскрывающемся списке под раскрывающимся списком «Начать задачу».
- Вы можете запускать задачу ежедневно, еженедельно или ежемесячно. Если вы выбираете еженедельно, выберите дни недели, когда вы хотите запускать задачу.
- После этого нажмите кнопку ОК.
- Перейдите на вкладку «Действия» и нажмите кнопку «Создать…».
- В окне «Новое действие» заполните следующее:
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"
- Нажмите ОК.
Создается новая задача, которая при запуске удаляет файлы в вашем 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 дней, не могут быть удалены.
Указанная команда состоит из трех частей:
-
Get-ChildItem
Командлет получает список файлов в папке «Документы». - Затем вывод передается в
Where-Object
Командлет, чтобы выполнить фильтрацию, выбирая только файлы, которые не были изменены в последнемx
количество дней (в этом примере30 days
). - Наконец, мы передаем вывод в
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
опция, так что обрабатывается только текущая папка.