Каталог расширений

Популярные теги

3gp       avi       fb2       jpg       mp3       pdf      

Как удалить файлы старше определенной даты в bat файле


Удалить файлы старше N дней в Windows

Создаем обычный .bat файл, сделать это можно с помощью блокнота.

Вписываем туда команду

Forfiles -p "C:\папка с файлами" -s -m *.* -d -60 -c "cmd /c del /q @path"

Параметры

-p папка в которой мы будем удалять файлы

-s рекурсивное удаление (удаление во всех папках и под папках)

-m маска поиска файлов

-d (количество дней) выбор файлов, у которых дата изменения меньше или равна (-) текущей даты.

-с команда, которая выполняется для каждого файла

del - команда удаления

/q - отключения запросов на подтверждение при удалении

@path - возвращает полный путь до файла.

Сохраняем файл с расширением .bat

Удаление файлов по сети с помощью forfiles

Как удалять файлы старше 10 дней на windows

Делаю бекапы каждый день, накапливается не один десяток гигабайт информации. Чистить нужно, тем более старые бекапчики особой важности не несут. Раньше удалял вручную, но потом задумался… Вручную делать это лень, тем более можешь завтыкать, протупить и удалить не то. Короче, ленивый сделает лучше всех — нужно автоматизировать.

Воспользовался встроенной утилитой forfiles. Теперь все делает планировщик задач и несложный bat-ник в две строки. Пример дальше.

Команды forfiles. Примеры

Вот так примерно выглядит команда для отображения всех файлов с расширением .rar на диске С старше 10-ти дней:
forfiles /p C:\ /m *.rar /s /d -10 /c «cmd /c echo @path»

Разберем ключи по порядку:

/p — пусть для проверки. В примере диск C:\
/m — маска для поиска. Можно не задавать, если хотим убрать все файлы в папке. В примере все архивы с расширением .rar
/s — сканируем вложенные папки в том числе.
/d — дата. Можно задать в формате dd.mm.yyyy или dd. У нас -10 дней, можно указать +N дней. Про +N дней читайте далее.
/c — команда. Ключевое что нам нужно — собственно что мы будем делать с файлами. В командах также можно использовать переменные:
@path — показывает полный путь к файлу и его имя.
@relpath — показывает путь к файлу только в сканируемой папке.
@file — имя файла полностью с расширением.
@fname — только имя файла, без расширения.
@ext — только расширение имени файла.
@isdir — проверка типа файла — папка или файл. Возвращает true, если папка, и false для файлов.
@fsize — возвращает размер файла в байтах.
@fdate — возвращает дату последнего изменения файла.
@ftime — возвращает время последнего изменения файла.

Также результаты исполнения скрипта можно записать в файл.

Пример использования forfiles — отобразить все файлы .zip на диске и записать их в файл

Следующий код отобразит все Ваши исполняемые файлы .exe:
forfiles /p C:\ /m *.exe /s /c «cmd /c echo @path»

Если нужно их записать в файл, то добавьте в конце знак БОЛЬШЕ и адрес куда сохранить файл (лучше всего прописать полный путь).
forfiles /p C:\ /m *.exe /s /c «cmd /c echo @path» > D:\all_exefiles.txt

Вставляем код в cmd:

Forfiles. Запись в файл выполненного скрипта

Результат — созданный файл на диске D:\ и его содержимое (можно много интересного найти):

Forfiles. Запись в файл выполненного скрипта. Результат

Пример forfiles с переменными путь, дата, размер

Давайте вызовем все наши файлы с диска D:\ с расширением .zip, а выведем их на экран с адресом, датой и размером файла. Используем скрипт:

forfiles /p D:\ /m *.zip /s /c «cmd /c echo @path изменен @fdate и размером @fsize байт »

Вот результат выполнения скрипта:

Команды forfiles. Используем переменные со своим текстом

Как удалить файлы старше 10 дней

Чаще всего forfiles используют как раз для задачи удаления устаревших файлов. Вот Вам cmd скрипт для удаления старых файлов (в примере старше 10 дней):
forfiles /p C:\ /m *.rar /s /d -10 /c «cmd /c del @path /q»

Как удалить папки старше 7 дней с помощью forfiles

Кроме самих файлов не лишним будет удалять и папки, тем более если они будут пустые (без файлов). Код:
forfiles /p C:\downloads /s /d -7 /c «cmd /c rmdir /s del @path /q»
В этом примере я написал уже 7 дней. Для удаления папок мы используем rmdir, ключ /s — для сканирования вложенных папок, del — команда удаления, /q — удаление без подтверждения.

CMD Скрипт удаление файлов старше n дней — Погодин Евгений

Удаление файлов через cmd утилитой forfiles.exe

Пример как с ее помощью можно удалять бекапы старше 20 дней:

forfiles.exe /p С:\Backup\ /s /m *.* /d -20 /c «cmd /c del /q /f @file»

обычный батник — и вуаля само делает неинтересную работу..

справка по FORFILES

FORFILES [/P <путь>] [/M <маска_поиска>] [/S]

[/C <команда>] [/D [+ | -] {dd.MM.yyyy | dd}]

Описание.

Выбор файла (или набора файлов) и выполнение команды

с этим файлом. Программа полезна для пакетных заданий.

Параметры:

/P <путь> Путь, с которого начинается поиск.

По умолчанию используется текущая

рабочая папка (.).

/M <маска_поиска> Поиск файлов с помощью маски.

Маска поиска по умолчанию «*» .

/S Рекурсивное выполнение программы forfiles

во всех подпапках, аналогично «DIR /S».

/C <команда> Команда, которая выполняется для каждого файла.

Строки команд необходимо заключать в прямые

кавычки.

Команда по умолчанию «cmd /c echo @file».

Следующие переменные могут использоваться

в строке команды:

@file — возвращает имя файла.

@fname — возвращает имя файла без

расширения.

@ext — возвращает только расширение имени

файла.

@path — возвращает полный путь к файлу.

@relpath — возвращает относительный путь к

файлу.

@isdir — возвращает значение «TRUE», если типом

файла является папка, и «FALSE» для файлов.

@fsize — возвращает размер файла

в байтах.

@fdate — возвращает дату последнего изменения

файла.

@ftime — возвращает время последнего изменения

файла.

Для включения специальных символов в строку команды

следует использовать шестнадцатеричный код символа

в формате 0xHH (например, 0x09 для табуляции).

Перед внутренними командами CMD.exe необходимо ставить

«cmd /c».

/D <дата> Выбор файлов, у которых дата последнего изменения

больше или равна (+) либо меньше или равна

(-) указанной дате при использовании формата

«dd.MM.yyyy»; либо файлов, у которых дата последнего

изменения больше или равна (+)

текущей дате плюс «dd» дней либо меньше или

равна (-) текущей дате минус «dd» дней.

Допустимым числом дней «dd» является любое

число в диапазоне 0 — 32768.

«+» используется по умолчанию, если знак не указан.

/? Вывод справки по использованию.

Примеры:

FORFILES /?

FORFILES

FORFILES /P C:\WINDOWS /S /M DNS*.*

FORFILES /S /M *.txt /C «cmd /c type @file | more»

FORFILES /P C:\ /S /M *.bat

FORFILES /D -30 /M *.exe

/C «cmd /c echo @path 0x09 был изменен 30 дней назад»

FORFILES /D 01.01.2001

/C «cmd /c echo @fname является новым с 1-янв-2001»

FORFILES /D +25.1.2011 /C «cmd /c echo @fname является новым сегодня»

FORFILES /M *.exe /D +1

FORFILES /S /M *.doc /C «cmd /c echo @fsize»

FORFILES /M *.txt /C «cmd /c if @isdir==FALSE notepad.exe @file»

Удаление устаревших файлов в Windows

Простые действия в Windows не всегда простые:)
Для удаления файлов старше какого-либо периода в Unix отлично справляется нативная команда find.
Для Windows времен 2000 и XP приходилось использовать либо сторонние программы, либо писать на VBS.
Но начиная с Windows7 в поставке появилась утилита forfiles, которая легко решает данную задачу.

Напишем bat-файл для удаления файлов старше 30 дней из директории C:\temp\logs:

forfiles.exe -p C:\temp\logs -s -d -30 -c "cmd /c del @path /q"

Где:
  • -p — Путь
  • -s — Разрешаем ходить рекурсивно
  • -d — Дата (Можно указать точную дату формата ‘dd.MM.yyyy’)
  • -30 — относится к ключу ‘-d’ и указывает, что ищем файлы старше 30 дней
  • -с —  Команда, которая выполняется для каждого файла

В двух словах:
Рекурсивно ищем все (можно искать по маске файла, добавив ключ ‘-m *.log’) файлы в директории  ‘C:\temp\logs’, которые старше 30 дней, далее каждое вхождение передаем команде  ‘cmd /c del @path /q‘ , где:

  • cmd — интерпретатор Windows
  • /c — выполнить cmd и закрыть
  • del — встроенная команда windows для удаления файлов
  • @path — адрес файла, который нам вернул forfiles.exe
  • /q — тихий режим

Утилита forfiles.exe прекрасно работает на windowsXP и даже на Windows2000, достаточно ее скопировать с windows7  и разместить по системному пути, например в %windir%, выложил forfiles.exe на обменник.

( Пока оценок нет )

Понравилась статья? Поделиться с друзьями:

как удалить папки (файлы) до определенной даты? — Хабр Q&A

Добрый день всем читающим!

Есть каталог D:\backup с набором подкаталогов, имеющих название по дате создания.
Каталоги в D:\backup:

2015.06.20 2015.06.21 2015.06.22 ... 2015.06.29

Мне понадобилось сделать так, чтобы из набора этих папок остались последние три.

Нашел код, прибавляющий N дней к текущей дате (при вводе -N отсчёт по дням идёт назад):

:FromNow setLocal set now=%date% set /a yyyy=%now:~-4% set /a mm=1%now:~3,2%-100 set /a dd=1%now:~,2%-100 set /a JD=%~1+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4 set /a L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001 set /a L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11 set /a J=J+2-12*L,I=100*(N-49)+I+L set /a yyyy=I,mm=100+J,dd=100+K EndLocal& set yyyymmddborder=%yyyy%.%mm:~-2%.%dd:~-2%

На выходе при вызове функции имею дату (название папки), до которой нужно удалять папки:

call :FromNow -3 echo %yyyymmddborder% > 2015.06.26

Осталось перебрать папки в цикле в обратном порядке, и начать удалять, когда будет встречено нужное название. В обычном виде отлично подходит FOR:
for /d %%B in (D:\backup\*) do echo %%B
Однако не могу разобраться, как сделать перебор каталогов в обратном порядке.

Вопросы:
1. Правилен ли путь с сортировкой в обратном порядке - и как его сделать?
2. Или есть другой, более простой вариант решения этой задачи?

Заранее благодарю за помощь.

Удаление файлов через Powershell старше даты

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


 $date = Get-Date -Year 2017 -Month 12 -Day 31 -Hour 23

Можно дату задать несколькими днями назад. Это удобно для скриптов, которые будут все время висеть в планировщике:


 $date = (Get-Date).AddDays(-15)

На моем примере дата получится в таком формате:

Т.к. я не установил минуты и секунды - они взялись по умолчанию из текущего дня. Если мы не установим год, например, то он будет текущим 2019.

 

Далее нам нужно использовать Get-Childitem для того что бы получить все файлы:


 $for_delete = Get-ChildItem -Path "C:\TestFolder\" -Include "*.txt" -Recurse

Где:

  • Path - путь до директории
  • Include - включает, в моем случае, все файлы которые кончаются на txt
  • Recurse - поиск файлов не только в текущей папке, но и в подпапках.

У файла есть несколько свойств c датами (datetime). Все их увидеть можно так:


 $for_delete | Get-Member | Where-Object -Property Definition -Like "*date*"

  • CreationTime
  • CreationTimeUtc
  • LastAccessTime
  • LastAccessTimeUtc
  • LastWriteTime
  • LastWriteTimeUtc

UTC значит, что дата будет в формате всемирного времени.

 

Меня интересует удаление файлов по дате создания. Для этого сделаем так:


 $for_delete | Where-Object -Property CreationTime -gT $date | Remove-Item

Т.е. для каждого файла где свойство CreationDate (дата создания файла) LessThen (больше чем) дата в переменной произвести удаление. Таким образом мы удалили в powershell файлы старше определенной даты. Мы можем использовать и другие операторы сравнения:

  • lt - меньше
  • le - меньше или равно
  • gt - больше
  • ge - больше или равно
  • ne - не равно

 

Готовый скрипт по удалению файлов:


 #Дата с которой сравнивать. В этом случае -15 дней от текущей даты
 $date = (Get-Date).AddDays(-15)
 #Или дата кастомная. Пустые значения будут взяты из текущего времени и даты
 $date = Get-Date -Year 2018 -Month 12 -Day 2 -Hour 12 -Minute 13
 #Путь до директории откуда удалять файлы
 $path = "C:\TestFolder\"
 #Удаление всех файлов и папок (в т.ч. внутри папок) старше чем значение в $date
 Get-ChildItem -Recurse -Path $path | Where-Object -Property CreationTime -gT $date | Remove-Item

 

...

Теги: #powershell

windows - Пакетный файл для удаления файлов старше N дней

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
.

окон - Пакетный скрипт для удаления файлов старше X дней (на основе даты создания, а не даты изменения)

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
.

Пакетный скрипт для удаления файла старше 1 дня с использованием даты создания

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
.

windows - Пакетный файл для рекурсивного удаления файлов в папке старше N дней

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с
.

javascript - В Node удалить все файлы старше часа?

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

Смотрите также