Сохраните х количество файлов и удалите все остальные - ЧАСТЬ ВТОРАЯ - PullRequest
2 голосов
/ 18 января 2012

Ранее я задавал вопрос о том, как пройти через структуру каталогов и сохранить 7 самых последних копий файла в каждом подкаталоге. Сценарий ниже - это то, что было создано, и оно прекрасно работает, но только в 1 каталоге. Мне нужно пройти через весь каталог и сохранить 7 новейших файлов в каждом подкаталоге.

Для тестирования я создал структуру каталогов в C: \ Customer с подкаталогами Test1, Test2, Test3. Затем я создал 12 тестовых файлов в каждом каталоге, включая C: \ Customer верхнего уровня. Файлы назывались Test1_Report_.txt - Test12. Когда я запустил скрипт ниже, он удалил все файлы верхнего уровня, Test1, Test2 и сохранил 7 самых последних копий в Test3. Что мне здесь не хватает? Любая помощь будет принята с благодарностью.

$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 голосов
/ 18 января 2012

Не проверено, но я думаю, что это будет делать то, что вам нужно.Это обработает все каталоги и сохранит 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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...