Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление старых файлов/папок если их кол-во больше n

Ответить
Настройки темы
CMD/BAT - [решено] Удаление старых файлов/папок если их кол-во больше n

Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день!
Помогите со скриптом, который будет сканировать нужную папку (например: C:\aaa), и если в нем файлов больше чем n (например 10), то удалить самый старый файл. И тоже самое нужно для папок.
Очень надеюсь на вашу помощь.

Отправлено: 14:32, 03-07-2013

 
POV POV вне форума

Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте ещё раз все !
Прошу прощения - были форс мажорные обстоятельства ... Не до скриптов было
С батником, увы, так и не заработало
Итак: Действительно вот такой вариант РАБОТАЕТ !!! Удаляет файлы через n-дней только ПО ВРЕМЕНИ СОЗДАНИЯ в данной директории, не обращая внимания на дату изменения.
Код: Выделить весь код
$Now = Get-Date
$Days = "10"
$TargetFolder = "\\srv-zavod\Obmen\"
$Extension = "*"
$LastWrite = $Now.AddDays(-$Days)
$Files = Get-Childitem $TargetFolder -Include $Extension -Recurse | Where{$_.CreationTime -le "$LastWrite" -and $_.LastWriteTime -le "$LastWrite"} | Sort-Object -Descending {$_.FullName.Split('\').Count},FullName
foreach ($File in $Files)
{
 if ($File -ne $NULL -and !$File.PSIsContainer)
 {
  write-host "Deleting File $File" -ForegroundColor "Magenta"
  Remove-Item $File.FullName -Force | out-null
 }
 elseif ($File -ne $NULL -and $File.PSIsContainer)
 {
		$FolderInfo = get-Childitem $File.FullName | Measure-Object
		if ($folderInfo.count -eq 0)
		{
			write-host "Deleting directory - $File" -foregroundcolor "green"
			Remove-Item $File.FullName -Force | out-null
		}
 }
 else
 {
  Write-Host "No more files to delete!" -foregroundcolor "Green"
 }
 }
Теперь остался ,надеюсь, последний вопрос: Какие строки добавить в этот .ps1 и куда, чтобы НЕ УДАЛЯЛИСЬ ИМЕННО СОЗДАННЫЕ ПАПКИ (чтобы сотрудникам заново не приходилось их создавать) или ПРОПИСЫВАТЬ ПАПКИ-ИСКЛЮЧЕНИЯ (что менее удобно)
Заранее благодарю за отзывчивость
P.S.
Вот бы лог куда-нить бы сливался ещё по удаленным файлам ...

Последний раз редактировалось POV, 13-01-2023 в 13:11.


Отправлено: 12:18, 13-01-2023 | #31



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1216
Благодарности: 508

Профиль | Отправить PM | Цитировать


Цитата POV:
Удаляет файлы через n-дней только ПО ВРЕМЕНИ СОЗДАНИЯ в данной директории, не обращая внимания на дату изменения. »
Не знаю, где Вы взяли этот скрипт, здесь Вам показывали другой...
Тем не менее, он таки учитывает обе даты... в нем будут удалятся и файлы, и каталоги по дате создания и дате изменения старше $Days дней.

Цитата POV:
Какие строки добавить в этот .ps1 и куда, чтобы НЕ УДАЛЯЛИСЬ ИМЕННО СОЗДАННЫЕ ПАПКИ (чтобы сотрудникам заново не приходилось их создавать) »
Всё тот же скрипт, предложенный DJ Mogarych, с корректировкой для лог-файла (будет перезаписываться при каждом запуске скрипта):
Код: Выделить весь код
$folder = 'D:\Test\'
$fout = '.\log_delete.txt'
$n = 10
$olderThan = (get-date).Date.AddDays(-$n)
dir $folder -file -rec -force|? {$_.creationtime -lt $olderThan -and $_.lastwritetime -lt $olderThan}|
tee $fout|del -force -WhatIf

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 13-01-2023 в 13:21. Причина: выведено количество дней в отдельную переменную.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:09, 13-01-2023 | #32

POV POV вне форума

Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


YuS_2
СПАСИБО ОГРОМНОЕ !!!!!!
Куда высылать пиво ?
Но для теста поставил 1 день и скрипт НЕ УДАЛЯЕТ файлы, а только констатирует. И кстати лог тоже не появляется
Код: Выделить весь код
PS C:\Users\it>> $folder = 'D:\Test\'
$fout = '.\log_delete.txt'
$n = 1
$olderThan = (get-date).Date.AddDays(-$n)
dir $folder -file -rec -force|? {$_.creationtime -lt $olderThan -and $_.lastwritetime -lt $olderThan}|
tee $fout|del -force -WhatIf
WhatIf: Выполнение операции "Удаление файла" над целевым объектом "D:\Test\batnik.bat".
WhatIf: Выполнение операции "Удаление файла" над целевым объектом "D:\Test\README.md".

Последний раз редактировалось POV, 13-01-2023 в 13:36.


Отправлено: 13:29, 13-01-2023 | #33


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1216
Благодарности: 508

Профиль | Отправить PM | Цитировать


Цитата POV:
Куда высылать пиво ? »
На почту "до востребования"...
С наступающим СНГ!

-------
scio me nihil scire. Ѫ


Отправлено: 13:34, 13-01-2023 | #34


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1216
Благодарности: 508

Профиль | Отправить PM | Цитировать


Цитата POV:
Но для теста поставил 1 день и скрипт НЕ УДАЛЯЕТ файлы, а только констатирует. И кстати лог тоже не появляется »
Потому, что файлы не подходят по критериям отбора...
1. Если ставить 1 день, то дата создания И дата изменения файла должна быть старее вчерашней даты.
2. Лог не появляется потому, что нет списка файлов.
3. Хмм, что значит констатирует? Если таки файлы отбор проходят, то:
Цитата YuS_2:
Посмотрите вывод скрипта... если перечислены правильные файлы на удаление, то уберите параметр -WhatIf в командлете del (сам командлет имеет другое полное название, это его алиас) и выполните скрипт повторно для реального удаления файлов... »
И по логу: если запускаете командлеты в консоли, то лучше укажите абсолютный путь для лог-файла, ибо создаваться в таком виде он будет в текущем каталоге... либо рядом со скриптом, если запускаете именно скрипт

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 13-01-2023 в 14:42.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:24, 13-01-2023 | #35

POV POV вне форума

Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


YuS_2,
Цитата YuS_2:
то уберите параметр -WhatIf в командлете del »
Да, так всё сработало !!!
И лог тоже появился!
Ещё раз ВСЕМ ОГРОМНОЕ СПАСИБО !!!

Отправлено: 08:34, 14-01-2023 | #36



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление старых файлов/папок если их кол-во больше n

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - [решено] Кол-во файлов в папке. Balancer Microsoft Windows 7 11 21-10-2012 20:07
CMD/BAT - Удаление старых файлов по имени файлов Bиктор Скриптовые языки администрирования Windows 1 19-04-2010 03:37
[решено] как получить список, если кол-во строчек не постоянно Russo AutoIt 2 18-12-2009 10:41
кол-во файлов в папке rivera Microsoft Windows NT/2000/2003 3 29-06-2006 09:38
максимальное кол-во файлов на Cd-ROMе Dr Mad Хочу все знать 1 05-09-2005 06:19




 
Переход