选择第二个或第三个对象/元素

时间:2015-08-05 11:39:30

标签: powershell get-childitem

我想在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

我想得到第二个,或第三个,或第四个。 (不是前两个等等)。

有办法吗?

4 个答案:

答案 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]