powershell,检查备份目录并仅在有多个文件时删除旧目录

时间:2017-09-28 18:17:37

标签: powershell

大家好,我正在尝试检查文件夹的目录和子目录,如果其中一个文件有超过15天的时间来删除它,只留下最新的文件。

但是我仍然不知道如果我有一个超过15天的单个文件,只要在同一目录中有一个更新,就不要触摸它。

我目前正在使用此代码

$timeLimit = (Get-Date).AddDays(-15) 
Get-ChildItem D:\backup\OldFilesTemp -Directory | where LastWriteTime -lt $timeLimit  | Remove-Item -Force -Recurse

感谢他们给予我的支持。

2 个答案:

答案 0 :(得分:0)

您可以尝试以下内容:

$timeLimit = (Get-Date).AddDays(-15) Get-ChildItem D:\backup\OldFilesTemp | Where-Object { $_.PSIsContainer } | ForEach-Object { Get-ChildItem $_ | Where-Object { -not $PSIsContainer } | Sort-Object -Property LastWriteTime -Descending | Select-Object -Skip 1 | Where-Object { $_.LastWriteTime -lt $timeLimit } | Remove-Item -Force }

Remove-Item -Force替换为Remove-Item -WhatIf以执行干运行。

答案 1 :(得分:0)

$timeLimit = ([System.DateTime]::Today).AddDays(-15) #Dont use Get-Date.
$BackupFolder = "D:\backup\OldFilesTemp"
$FolderList = Get-ChildItem $BackupFolder -Directory -Recurse | Select FullName

Foreach ($Folder in $FolderList)
{
    $FileList = Get-ChildItem $Folder -File | Sort-Object -Property LastWriteTime -Descending
    $Count = ($FileList | Where-Object -Property LastWriteTime -GE $timeLimit).Count

    #Keep an old file if there is only 1 or no recent backups
    if ($Count -le 1)
    {
        $FileList | Where-Object -Property LastWriteTime -LT $timeLimit | Select-Object -Skip 1 | Remove-Item -Force
    }
    else
    {
        $FileList | Where-Object -Property LastWriteTime -LT $timeLimit | Remove-Item -Force
    }
}

在部署环境之前,最好先进行测试。