Удаление старых файлов/папок если их кол-во больше n
Добрый день!
Помогите со скриптом, который будет сканировать нужную папку (например: C:\aaa), и если в нем файлов больше чем n (например 10), то удалить самый старый файл. И тоже самое нужно для папок. Очень надеюсь на вашу помощь. |
|
Хотя бы для одного файла, но лучше конечно, столько файлов, что бы осталось n.
Не, не домашка, как у всех, архивирование ) |
Файлы:
Код:
@echo off |
Iska, спасибо огромное, а то я искал, не нашел, думал, что на этом и остановлюсь :laiel:
|
Iska, а для папок не подскажете как?
|
Цитата:
Код:
@echo off |
Приветствую. Подскажи, как написать bat файл и сделать его приложением. Что бы в нем можно было выбирать сетевые или просто пути для разделов в которых хранятся файлы и папки, и для каждого раздела можно было бы указывать какое количество файлов допустимо в данном разделе и какой объем памяти должен быть для данного раздела, если он превышается что бы программа удаляла старые архивы файлы или папки. Пример для 1С бухгалтерии выделен раздел 1 ТБ но он вечно заполняется и уследить не успеваю, так чтобы при его критичном заполнении удалялись старые резервные копии, либо при превышении n-го количества фалов в разделе удалялись старые. За ранее большое спасибо.
|
Цитата:
Цитата:
Цитата:
set "sFolder=%~1" set /a iCount =%~2 и запускайте так: "name.bat" "Диск:\Папка" "Число файлов" |
Извините за режим чайника. Немного не въехал(((
set "sFolder=%~1" set /a iCount =%~2 что выполняют данные п |
Цитата:
|
KaПaTы4,
ну что непонятного? Берем код Iska из поста 4, подставляем параметры в значения переменных так: Код:
@echo off Код:
name.bat "Диск:\Папка" "Число файлов" |
Доброе время суток !
Прошу помощи .... 3 дня копания на различных ресурсах не дали результат :-( По поводу удаления старых файлов: Есть файловая помойка на удаленном компе \\fs\obmen Если делать типа так @echo off SET Path2Del=\\fs\Obmen\ forfiles -p "%Path2Del%" -s -m *.* -d -10 -c "cmd /c del /q @path" for /f %%D in ('DIR cd "%Path2Del%" /AD/B ^| sort /r') do RD "%%D" всё отлично отрабатывается и файлы старше 10 дней уничтожаются. Но проблема в том, что в папки сотрудники кидают и файлы которым сто лет в обед, и соответственно скрипт видит, что они старые и на следующий день их кикает ( потому как они не ВНОВЬ созданные ) Внимание, вопрос к знатокам: Каким образом можно либо автоматически переделывать у данных файлов дату на момент появления в директориях ( я уже думал, может перед выполнением скрипта бэкапить новые "старые" файлы, удалять их, а потом заново заливать, но со свежей датой) , либо каким-то образом переделать скрипт. Пожалуйста помогите. Задача архиважная. Заранее СПАСИБО. |
Цитата:
Код:
DIR /? Цитата:
|
POV, они вновь созданные. Просто forfiles смотрит не на дату создания, а на дату изменения.
Люди кладут файлы, и у файлов новая дата создания, но старая дата изменения. Возьмём пример: Код:
dir D:\temp\obmen |select name,creationtime,lastwritetime Код:
# CMD Код:
dir D:\temp\obmen |? creationtime -lt (get-date).Date.AddDays(-10) Код:
$olderThan = (get-date).Date.AddDays(-10) |
Спасибо, дорогие, что откликнулись !
YuS_2, Цитата:
HTML код:
https://github.com/sanglyb/remove-old-files-powershell DJ Mogarych Благодарю, смысл уловил, но опять-же как пониманию на cmd этого в данном случае не реализовать, и опять-же powershell ... (читай выше) .... |
Цитата:
Для начала: https://learn.microsoft.com/ru-ru/po...powershell-7.3 ну и: https://andpop.ru/courses/winscript/...posh_popov.pdf а по-быстрому: 1. Проверить политику запуска скриптов (в первой ссылке есть описание, вот более конкретная ссылка). Если стоит запрет на выполнение скриптов, то измените политику выполнения PowerShell на удаленно подписанную. 2. Скрипт лучше оформить в текстовом файле с кодировкой UTF-8 и дать ему какое-либо название, например: script.ps1 3. Запустите скрипт из командной оболочки powershell: Код:
.\script.ps1 Код:
@echo off Главное: Прежде, чем запускать скрипт, откорректируйте его под свои параметры, например так: Код:
$folder = '\\fs\Obmen\' |
YuS_2, Благодарю за ответ.
Про powershell: Естественно я могу такие скрипты запускать, я не умею на них писАть ! Потому и ковырял батники (что проще) Приведенный Вами вариант смогу испробовать через часик. Дам знать. |
Попробовал ....
.ps1 просто схлопывается через секунду, а если через cmd, то "Для продолжения нажмите любую клавишу . . ." и после нажатия такая-же ситуация .... И пробовал запускать под админом. |
Цитата:
Код:
@Echo Off Проверьте, что у Вас отображается в команде Dir Для отладки, чтобы скрипт реально не удалял файлы, перед Del можно поставить Echo &Echo Del "%%m" |
Цитата:
Цитата:
Совсем нет. Просто на cmd не практикую уже, ибо powershell хватает... а без практики, надо читать мануалы, составлять зубодробильный код, потом проверять всё, что получилось... нет, проще на powershell, всё же... :) |
megaloman, чего-то толи я тупой, толи лыжи не едут ....
Подставил в переменные даты 2023 год 09 января и всё равно не удаляются файлы .... Знаю, что уже надоел :sorry: Может всё таки попробовать с .ps1 ? Вот такой вариант хорошо справляется с задачей, но в нём надо подкорректировать , чтобы как я и писал ранее, не удалялись закинутые в данный Obmen старинные файлы. Код:
$Now = Get-Date |
Вложений: 2
YuS_2,
Цитата:
|
POV, т.е. никакого исключения нет, хотя это очень странно... не вижу в первой строке кавычек... а без них никуда. :)
Кроме того, возможно, файлы, которые присутствуют в каталоге, не подходят под условие на удаление. Какая у них дата создания? (можно посмотреть в свойствах файла) Для проверки, покажите вывод команд: Код:
$folder = 'D:\TEST\' |
POV, а, да... на скриншоте видно, что Вы весь пакет строк пытались запустить за один раз... но надо построчно именно, т.е. каждую строку вставляем, Enter и т.д. ...
|
Да можно и пакет, просто кавычек не было, поэтому шелл думал, что это продолжение одной строки.
|
Цитата:
2. В командной строке запустите Dir \\fs\obmen\*.* >C:\obmen.txt Хотя бы небольшой кусок получившегося файла приложите к сообщению. |
Цитата:
|
На первом скрине вторая строка начинается с >>, соответственно, первая не закончилась.
|
Цитата:
|
Здравствуйте ещё раз все !
Прошу прощения - были форс мажорные обстоятельства ... :sorry: Не до скриптов было С батником, увы, так и не заработало :unsure: Итак: Действительно вот такой вариант РАБОТАЕТ !!! Удаляет файлы через n-дней только ПО ВРЕМЕНИ СОЗДАНИЯ в данной директории, не обращая внимания на дату изменения. Код:
$Now = Get-Date Заранее благодарю за отзывчивость P.S. Вот бы лог куда-нить бы сливался ещё по удаленным файлам ... |
Цитата:
Тем не менее, он таки учитывает обе даты... в нем будут удалятся и файлы, и каталоги по дате создания и дате изменения старше $Days дней. Цитата:
Код:
$folder = 'D:\Test\' |
YuS_2
СПАСИБО ОГРОМНОЕ !!!!!! :yahoo: Куда высылать пиво ? :up Но для теста поставил 1 день и скрипт НЕ УДАЛЯЕТ файлы, а только констатирует. И кстати лог тоже не появляется Код:
PS C:\Users\it>> $folder = 'D:\Test\' |
Цитата:
С наступающим СНГ! |
Цитата:
1. Если ставить 1 день, то дата создания И дата изменения файла должна быть старее вчерашней даты. 2. Лог не появляется потому, что нет списка файлов. 3. Хмм, что значит констатирует? Если таки файлы отбор проходят, то: Цитата:
|
YuS_2,
Цитата:
И лог тоже появился! Ещё раз ВСЕМ ОГРОМНОЕ СПАСИБО !!! |
Время: 22:17. |
Время: 22:17.
© OSzone.net 2001-