Windows
May 11, 2023

Скрипт удаления папок Windows старше N дней

Для запуска этого скрипта необходимо сохранить его в файл с расширением .ps1 и запустить его в PowerShell-консоли. Перед запуском скрипта необходимо установить значения переменных $days и $path в соответствии с вашими потребностями. Также убедитесь, что у вас есть необходимые права на удаление папок в указанной директории.

# Установите дату, старше которой необходимо удалить папки (в днях)
$days = 30

# Установите путь к директории, в которой нужно удалить папки
$path = "C:\Path\To\Directory"

# Получаем текущую дату и вычитаем количество дней, чтобы получить дату, старше которой нужно удалить папки
$date = Get-Date
$oldDate = $date.AddDays(-$days)

# Получаем список папок в указанной директории
$folders = Get-ChildItem $path -Directory

# Инициализируем переменные для отображения прогресса
$totalFolders = $folders.Count
$currentFolder = 0

# Проходим по каждой папке в списке и удаляем те, которые старше указанной даты
foreach ($folder in $folders) {
    if ($folder.LastWriteTime -lt $oldDate) {
        Remove-Item $folder.FullName -Recurse -Force
    }
    $currentFolder++
    $percentComplete = ($currentFolder / $totalFolders) * 100
    Write-Progress -Activity "Removing old folders" -Status "$currentFolder of $totalFolders folders processed" -PercentComplete $percentComplete
}

Вариация скрипта удаление папок старше N дней + удаление пустых папок:

 # Установите дату, старше которой необходимо удалить папки (в днях)
$days = 30

# Установите путь к директории, в которой нужно удалить папки
$path = "C:\Path\To\Directory"

# Получаем текущую дату и вычитаем количество дней, чтобы получить дату, старше которой нужно удалить папки
$date = Get-Date
$oldDate = $date.AddDays(-$days)

# Получаем список папок в указанной директории
$folders = Get-ChildItem $path -Directory

# Инициализируем переменные для отображения прогресса
$totalFolders = $folders.Count
$currentFolder = 0

# Проходим по каждой папке в списке и удаляем те, которые старше указанной даты
foreach ($folder in $folders) {
    if ($folder.LastWriteTime -lt $oldDate) {
        Remove-Item $folder.FullName -Recurse -Force
    }
    elseif ((Get-ChildItem $folder.FullName -Force | Measure-Object).Count -eq 0) {
        Remove-Item $folder.FullName -Recurse -Force
    }
    $currentFolder++
    $percentComplete = ($currentFolder / $totalFolders) * 100
    Write-Progress -Activity "Removing old and empty folders" -Status "$currentFolder of $totalFolders folders processed" -PercentComplete $percentComplete
}