2015-08-22 2 views
1

Для создания ротации я хочу сохранить только 10 последних элементов в папке. Сборка находится во вложенных папках с именем id (порядок увеличения) сборки.Powershell содержит только n новых элементов в папке (строит вращение)

Mode    LastWriteTime   Length Name 
----    -------------   ------ ---- 
d-----   21.8.15 7:39 PM    121 
d-----   21.8.15 10:39 PM    122 
d-----   21.8.15 10:39 PM    123 
d-----   21.8.15 10:39 PM    124 
d-----   21.8.15 10:39 PM    125 

Я хочу знать, есть ли более элегантный способ, чем тот, который я использую.

$exclude = dir | Sort-Object Name -Descending | Select-Object Name -f 10 
Get-Item * | Where-Object { $_.PSIsContainer -and $exclude.Name -notcontains $_.Name} | Remove-Item 

ответ

2

Вы можете использовать Select-Object -Skip $n пропустить $n папки, а затем удалить все остальное:

Get-ChildItem -Directory | Sort-Object LastWriteTime -Descending |Select-Object -Skip 2 | Remove-Item -Recurse 
+0

Woow, спасибо. Это приятно и просто. Только добавьте -Descending. Я забыл в своем примере. Спасибо –

+0

@ Ярослав Кубачек Конечно. Я бы, вероятно, тоже пошел на сортировку по «LastWriteTime». С помощью 'Name' prop, если имена папок, где ie. '98,99,100', он потерпит неудачу (100 до 98, в алфавитном порядке) –

+0

Да, вы правы. благодаря –

Смежные вопросы