![Автоматическое удаление старых файлов [скрипт PowerShell]](https://www.mytechnote.ru/sites/default/files/styles/very_large__640_/public/field/image/delete-old-files-logo.png?itok=SyIyTwN4)
Хочу сегодня показать вам очередной скрипт PowerShell. В этот раз – для удаления старых файлов и пустых папок. Такой скрипт может пригодиться для отчистки, например файловых серверов, или каких-нибудь временных или обменных папок.
Скачать скрипт можно тут . Скрипт на GitHub .
Текст скрипта:
$Now = Get-Date $Days = "7" $TargetFolder = "C:\Users\sanglyb\Documents\" $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" } } #удаляем пустые папки, не зависимо от времени создания $folderInfo="" $Folders = Get-Childitem $TargetFolder -Recurse | Where{$_.PSIsContainer} | Sort-Object -Descending {$_.FullName.Split('\').Count},FullName foreach ($Folder in $Folders) { if ($Folder -ne $null) { $FolderInfo = get-Childitem $Folder.FullName | Measure-Object if ($folderInfo.count -eq 0) { write-host "Deleting directory - $Folder" -foregroundcolor "yellow" Remove-Item $Folder.FullName -force | out-null } } }
Пару слов, о том, что тут происходит.
$Days = "7" $TargetFolder = "C:\Users\sanglyb\Documents\" $Extension = "*"
Тут мы указываем количество дней, файлы старше которых должны быть удалены, задаем путь до отчищаемой папки и желаемые расширения файлов, если вам нужно удалять определенные типы файлов, например можно задать *.js тогда будут удалены все старые JavaScript файлы.
$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 } }
Тут мы удаляем папку, но перед ее удалением, проверяем, что бы она была пустая.
$folderInfo="" $Folders = Get-Childitem $TargetFolder -Recurse | Where{$_.PSIsContainer} | Sort-Object -Descending {$_.FullName.Split('\').Count},FullName foreach ($Folder in $Folders) { if ($Folder -ne $null) { $FolderInfo = get-Childitem $Folder.FullName | Measure-Object if ($folderInfo.count -eq 0) { write-host "Deleting directory - $Folder" -foregroundcolor "yellow" Remove-Item $Folder.FullName -force | out-null } } }
По сути, это повторение уже проделанной операции. Но тут мы проходимся по всем папкам, ищем пустые папки и удаляем их.
Такой вот не хитрый, но думаю весьма полезный в хозяйстве скриптик. Надеюсь, информация окажется вам полезной.
Поделитесь статьей с друзьями в соц. сетях, возможно, она будет им полезна.
Если вам помогла статья, вы можете >>отблагодарить автора<<
Комментарии
хорошо бы такой скриптик но со всеми пунктами очистки из CCleaner,ccenhancer,Privazer,remove empty directories и RegOrganizer.вот тогда бы я оплатил его.а то для чего нужно столько программ если все может заменить 1 скрипт?
Огромная благодарность автору и БОЛЬШОЙ респект за очень полезный в хозяйстве скрипт, а на серверах (особенно терминальных) просто незаменим!
Оставить комментарий