我想在PowerShell脚本中选择Get-ChildItem
语句的第二个/第三个/第四个对象。这给了我第一个:
$first = Get-ChildItem -Path $dir |
Sort-Object CreationTime -Descending |
Select-Object -First 1
这给了我前三个:
$latest = Get-ChildItem -Path $dir |
Sort-Object CreationTime -Descending |
Select-Object -First 3
我想得到第二个,或第三个,或第四个。 (不是前两个等等)。
有办法吗?
答案 0 :(得分:10)
用于选择第n个元素跳过前n-1个元素:
$third = Get-ChildItem -Path $dir |
Sort-Object CreationTime -Descending |
Select-Object -Skip 2 |
Select-Object -First 1
或选择前n个,然后选择最后一个元素:
$third = Get-ChildItem -Path $dir |
Sort-Object CreationTime -Descending |
Select-Object -First 3 |
Select-Object -Last 1
但要注意,如果输入的元素少于n个,则这两种方法会产生不同的结果。第一种方法将在该场景中返回$null
,而第二种方法将返回最后一个可用元素。根据您的要求,您可能需要选择其中一个。
答案 1 :(得分:1)
@AnsgarWiechers建议的第二种方法很容易变成一种简单的可重复使用的功能,如下所示:
function Select-Nth {
param([int]$N)
$Input | Select-Object -First $N | Select-Object -Last 1
}
然后
PS C:\> 1,2,3,4,5 |Select-Nth 3
3
答案 2 :(得分:0)
第一项
gci > out.txt
Get-Content out.txt | Select -Index 7 | Format-list
第二项
gci > out.txt
Get-Content out.txt | Select -Index 8 | Format-list
n和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
}
注意:前七行是空的和描述行。
答案 3 :(得分:0)
您还可以使用索引n-1将元素作为数组项访问。这似乎比链接管道更简洁。
$third = (Get-ChildItem -Path $dir | Sort-Object CreationTime -Descending)[2]