Удаление файлов с помощью Powershell рекурсивно - PullRequest
1 голос
/ 06 февраля 2020

У меня возникла странная проблема, я пытаюсь использовать процесс для автоматизации удаления файлов из папки, а также дочерних папок, я пытаюсь удалить только файлы старше 7 дней.

Мой код работает, но он удаляет файлы, которые меньше 7 дней при рекурсивном переходе в дочерние элементы. , Кто-нибудь мог бы здесь помочь? Мне просто нужно удалить в каждой папке / подпапке файлы старше 7 дней.

Param (
    [string]$Source = "C:\Users\Loredanes\Downloads\",
    [string]$Days = "1"
)


$Files = Get-ChildItem $Source -Recurse | Where-Object { !$_.PSIsContainer -and $_.LastWriteTime -lt (get-date).addminutes(-$($Days)) }

$Files | Remove-Item -Force

if ($Files.count -gt 0)
{
    $Folders = @()
    ForEach ($Folder in (Get-ChildItem -Path $Source -Recurse -Directory))
    {
        $Folders += New-Object PSObject -Property @{
            Object = $Folder
            Depth = ($Folder.FullName.Split("\")).Count
        }
    }

    $Folders = $Folders | Sort Depth -Descending
    ForEach ($Folder in $Folders)
    {   
        If ($Folder.Object.GetFileSystemInfos().Count -eq 0)
        {
            Write-Host "Removing Folder: $($Folder)"
            Remove-Item -Path $Folder.Object.FullName -Force
        }
    }
}
else
{
    Write-Host "No Empty folders found after removing files older than $($Days) days."
}

1 Ответ

0 голосов
/ 06 февраля 2020

Это должно делать то, что вы хотите:

$source = 'D:\Test'
$days   = 7

    # Remove Files
    Get-ChildItem $Source -Recurse | Where-Object { !$_.PSIsContainer -and $_.LastWriteTime -lt (get-date).AddDays(-$($days)) } | % { Remove-Item -Path $_.FullName -Force }

    # Remove empty directories
    Get-ChildItem $source -Recurse | Where-Object { $_.PSIsContainer -and $_.GetFiles("*.*").Count -le 0 } | % { Remove-Item -Path $_.FullName -Force }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...