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



我之前问了一个问题,关于如何遍历目录结构并在每个子目录中保留文件的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
}

未测试,但我认为这将满足您的需要。这将处理所有目录,并在每个子目录中保留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
    }
}

相关内容

最新更新