扫描目录以查找特定文件集并按日期对其进行排序。无论日期如何,保留7个最新的文件副本,如果超过7,则删除最旧的副本。我很难生成显示删除的日志文件,因为Remove-Item
没有输出。
以下是我的代码的副本:
$path = "C:\- Deploy to Production -\Previous Deploys\*_*_BOAWeb.rar" #BOA
$files = Get-ChildItem -Path $path -Recurse | Where-Object {-not $_.PsIsContainer}
$keep = 7
if ($files.Count -gt $keep) {
$files | Sort-Object CreationTime |
Select-Object -First ($files.Count - $keep) |
Remove-Item -Force
}
答案 0 :(得分:6)
首先,你已经结束了复杂化的事情。将-Descending
添加到Sort
命令,然后将Select
更改为-Skip $keep
。这样简单。然后,您可以选择输出已删除的文件。
Remove-Item -Force -Verbose 4>&1 | Add-Content C:\Path\To\DeletedFiles.log
或(保持上面的当前代码)
Select-Object -First ($files.Count - $keep) |Tee-Object -filepath C:\Path\To\DeletedFiles.log -append
第一个将输出Delete-Item的详细输出,并将其附加到指定路径的任何日志文件中(如果要替换日志,请使用Set-Content
)。第二个选项会将[FileInfo]
个对象附加到您指定的日志中。
编辑正如Ansgar Wiechers所指出的那样,我忘记了将详细和stdout流组合在一起,因此4>&1
被添加到上面的代码中来纠正这个问题。