删除30以上的文件并保存1

时间:2017-11-28 14:15:24

标签: powershell

我需要一个清理脚本来删除超过30天的所有文件,但如果文件超过30天,它应该保存最后一个。可能? :)

我已经尝试了几个参数,但无法让它真正起作用..猜我需要一个if / else子句吗? 非常感谢任何指导和帮助,谢谢

$Daysback = "-30"
$CurrentDate = Get-Date
$DatetoDelete = $CurrentDate.AddDays($Daysback)
$path = "C:\Data\*"

$save1 = Get-ChildItem -Path $path | Where-Object {($_.Name -like "Test*.zip")} | sort LastWriteTime -Descending | select -First 

Get-ChildItem $path -Recurse    
{($_.CreationTime -le $(Get-Date).AddDays($Daysback))}
{
Remove-Item -Recurse -Force
}
elseif ($save1)
{   
Remove-Item -Recurse -Force
}
}

2 个答案:

答案 0 :(得分:1)

这样的事情应该有效。

$Daysback = "-30"
$CurrentDate = Get-Date
$DatetoDelete = $CurrentDate.AddDays($Daysback)
$path = "C:\Data\*"

$Items=Get-ChildItem -Path $path -Recurse | Where-Object {($_.Name -like "Test*.zip") -and ($_.LastWriteTime -le ($DatetoDelete))}| Sort-Object LastWriteTime -Descending
$Items|Select-Object -Skip 1 |Remove-Item -Recurse -Force -Path $_.fullname

Get-ChildItem - >过滤,只获取名称以Test开头的项目,并以30天前编写的.Zip结尾。对它们进行排序。

在删除行中,我们使用-Skip 1跳过排序列表中的第一项,并使用其路径删除项目。

答案 1 :(得分:0)

这可以简化。下面的块将抓取C:\Data中符合过滤条件的所有文件(显着快于Where-Object),然后根据CreationTime进一步减少这些文件,跳过1,然后删除其余文件。< / p>

Get-ChildItem -Path 'C:\Data' -Filter 'Test*.zip' -Recurse |
    Where-Object { -not $_.PSIsContainer -and
                   $_.CreationTime -le (Get-Date).AddDays(-30) } |
    Sort-Object -Property 'LastWriteTime' -Descending |
    Select-Object -Skip 1 |
    Remove-Item -Force -WhatIf