Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Скрипт на удаление папок PowerShell

Данила Кастырин Мастер (1147), на голосовании 1 год назад
Подскажите пожалуйста, есть скрипт на PowerShell который удаляет файлы и папки старше N дней ( в моем случае 15 )
Выглядит так :
dir C:\Users\User\Desktop\Test -recurse |
where { ((get-date)-$_.creationTime).days -gt 15 } |
remove-item -force
-----------------------------------
Необходимо задать условие, при котором скрипт будет отрабатывать только при условии, что в директории есть минимальное количество папок ( допустим 10 )
То есть будут удаляться файлы старше 15 дней при условии что имеется 10 папок внутри
если папок меньше ( от 9 и меньше ) то удаление прекращается ( симулируем что база перестала выгружаться а файлы дальше удалялись бы )
Спасибо
Голосование за лучший ответ
Беспрекословный Эксперт Мыслитель (6714) 1 год назад
Для добавления этого условия, вам нужно просто считать количество папок внутри указанной директории перед выполнением удаления. Ниже представлен код PowerShell, который делает именно это:
 # Считаем количество папок внутри директории 
$folderCount = (Get-ChildItem -Path "C:\Users\User\Desktop\Test" -Directory).Count

# Если количество папок >= 10, то выполняем удаление
if ($folderCount -ge 10) {
Get-ChildItem -Path "C:\Users\User\Desktop\Test" -Recurse |
Where-Object { ((Get-Date) - $_.CreationTime).Days -gt 15 } |
Remove-Item -Force
} else {
Write-Host "Количество папок меньше 10. Удаление отменено."
}
Этот скрипт сначала подсчитывает количество папок в указанной директории. Если их 10 или больше, скрипт продолжает удалять старые файлы и папки, как и в вашем первоначальном скрипте. В противном случае, он выводит сообщение, что удаление отменено.
Данила КастыринМастер (1147) 1 год назад
А подставить это значение надо после какой строки?
Беспрекословный Эксперт Мыслитель (6714) Данила Кастырин, Вам нужно добавить этот новый код в начало вашего существующего скрипта, чтобы сначала выполнить проверку на количество папок, а затем, если условие удовлетворяется, запустить удаление файлов и папок. Весь скрипт будет выглядеть так:
 # Считаем количество папок внутри директории 
$folderCount = (Get-ChildItem -Path "C:\Users\User\Desktop\Test" -Directory).Count 
 
# Если количество папок >= 10, то выполняем удаление 
if ($folderCount -ge 10) { 
    Get-ChildItem -Path "C:\Users\User\Desktop\Test" -Recurse |   
    Where-Object { ((Get-Date) - $_.CreationTime).Days -gt 15 } |  
    Remove-Item -Force 
} else { 
    Write-Host "Количество папок меньше 10. Удаление отменено." 
}  
Похожие вопросы