问题
I want to select the second/third/forth object of a Get-ChildItem
statement in my PowerShell script. This gives me the first:
$first = Get-ChildItem -Path $dir |
Sort-Object CreationTime -Descending |
Select-Object -First 1
This gives me the first three:
$latest = Get-ChildItem -Path $dir |
Sort-Object CreationTime -Descending |
Select-Object -First 3
I would like to get the second, or the third, or the fourth. (NOT the first two and so on).
Is there a way?
回答1:
For selecting the n-th element skip over the first n-1 elements:
$third = Get-ChildItem -Path $dir |
Sort-Object CreationTime -Descending |
Select-Object -Skip 2 |
Select-Object -First 1
or select the first n and then of those the last element:
$third = Get-ChildItem -Path $dir |
Sort-Object CreationTime -Descending |
Select-Object -First 3 |
Select-Object -Last 1
Beware, though, that the two approaches will yield different results if the input has less than n elements. The first approach would return $null
in that scenario, whereas the second approach would return the last available element. Depending on your requirements you may need to choose one or the other.
回答2:
The second approach suggested by @AnsgarWiechers can easily be turned into a simple reusable funtion, like so:
function Select-Nth {
param([int]$N)
$Input | Select-Object -First $N | Select-Object -Last 1
}
And then
PS C:\> 1,2,3,4,5 |Select-Nth 3
3
回答3:
You could also access the element as an array item, using the index n-1. This seems more succinct than chaining pipes.
$third = (Get-ChildItem -Path $dir | Sort-Object CreationTime -Descending)[2]
回答4:
First Item
gci > out.txt
Get-Content out.txt | Select -Index 7 | Format-list
Second Item
gci > out.txt
Get-Content out.txt | Select -Index 8 | Format-list
The item between n and p
$n=3
$p=7
$count = 0
$index = $n+7
$p=7+7
while($true){
$index = $index + $count
Get-Content out.txt | Select -Index $index | Format-list
if($index -eq $p)
{
break;
}
$count = $count + 1
}
Note : The first seven lines are empty and the description lines.
来源:https://stackoverflow.com/questions/31831470/select-second-or-third-object-element