保留x个文件并删除所有其他文件 - 第2部分

时间:2012-01-18 17:42:50

标签: powershell powershell-v2.0

我之前问了一个关于如何浏览目录结构并在每个子目录中保留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
}

1 个答案:

答案 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
    }
}