我之前问了一个关于如何浏览目录结构并在每个子目录中保留7个最新文件副本的问题。下面的脚本是创建的,它工作得很好但只在1个目录上。我需要浏览整个目录并在每个子目录中保留7个最新文件。
测试我在C:\ Customer下创建了一个目录结构,子目录为Test1,Test2,Test3。然后,我在每个目录中创建了12个测试文件,包括顶级C:\ Customer。这些文件名为Test1_Report_.txt - Test12。当我运行下面的脚本时,它删除了顶级Test1,Test2中的所有文件,并在Test3中保留了7个最新的副本。我在这里错过了什么?任何帮助将不胜感激。
$path = "C:\Customer"
$files = Get-ChildItem -Path $path -Recurse | Where-Object {-not $_.PsIsContainer} |where{$_.name -like "*_Report_*"}
$keep = 7
if ($files.Count -gt $keep) {
$files |Sort-Object CreationTime |Select-Object -First ($files.Count - $keep)| Remove-Item -Force
}
答案 0 :(得分:0)
未经测试,但我认为这将满足您的需求。这将处理所有目录并在每个子目录中保留7个最新文件。
$path = "C:\Customer"
$keep = 7
$dirs = Get-ChildItem -Path $path -Recurse | Where-Object {$_.PsIsContainer}
foreach ($dir in $dirs) {
$files = Get-ChildItem -Path $dir.FullName | Where-Object {-not $_.PsIsContainer -and $_.name -like "*_Report_*"}
if ($files.Count -gt $keep) {
$files | Sort-Object CreationTime | Select-Object -First ($files.Count - $keep) | Remove-Item -Force
}
}