简体   繁体   中英

Powershell delete Folder if all Files older than x days

I'm new at PowerShell and don't know so much about it.

I'm searching for a way to delete a folder and all sub-folders if all files in this are older than x days. I have an code to delete all files in a folder and all sub-folders but I don't know how to change it right.

$Now = Get-Date

$Days = "30"

$TargetFolder = "C:\temp"
$Extension = "*.*"
$LastWrite = $Now.AddDays(-$Days)

$Files = Get-Childitem $TargetFolder -Include $Extension -Recurse | Where {($_.CreationTime -le "$LastWrite") -and ($_.LastWriteTime -le "$LastWrite")}


foreach ($File in $Files) 
    {
    if ($File -ne $NULL)
        {
        write-host "Deleting File $File" -ForegroundColor "Red"
        Remove-Item $Location.FullName | out-Null
        }
    else
        {
        Write-Host "No more files to delete!" -foregroundcolor "Green"
        }
    }

Enumerate all folders and sort them longest path first, so you process the directories bottom to top:

Get-ChildItem $TargetFolder -Recurse -Directory |
    Select-Object -Expand FullName |
    Sort-Object Length -Desc

Filter the list for directories that don't have any file or folder newer than x days in them:

... | Where-Object {
    -not $(Get-ChildItem $_ -Recurse | Where-Object {
        $_.Creationtime -ge $LastWrite -or
        $_.LastWriteTime -ge $LastWrite
    })
}

Then remove the resulting folders:

... | Remove-Item -Recurse -Force

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM