select second or third object / element

前端 未结 4 1919
我寻月下人不归
我寻月下人不归 2021-01-02 05:51

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-Child         


        
相关标签:
4条回答
  • 2021-01-02 06:07

    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.

    0 讨论(0)
  • 2021-01-02 06:08

    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]
    
    0 讨论(0)
  • 2021-01-02 06:11

    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.

    0 讨论(0)
  • 2021-01-02 06:16

    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
    
    0 讨论(0)
提交回复
热议问题