web-dev-qa-db-ja.com

2番目または3番目のオブジェクト/要素を選択します

PowerShellスクリプトでGet-ChildItemステートメントの2番目/ 3番目/ 4番目のオブジェクトを選択したいと思います。これは私に最初を与えます:

$first = Get-ChildItem -Path $dir |
         Sort-Object CreationTime -Descending |
         Select-Object -First 1

これで最初の3つがわかります。

$latest = Get-ChildItem -Path $dir |
          Sort-Object CreationTime -Descending |
          Select-Object -First 3

2番目、3番目、4番目を取得したいのですが。 (最初の2つなどではありません)。

方法はありますか?

8
Tobi123

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未満の場合、2つのアプローチでは異なる結果が得られることに注意してください。最初のアプローチはそのシナリオで$nullを返しますが、2番目のアプローチは最後に使用可能な要素を返します。要件に応じて、どちらかを選択する必要があります。

15
Ansgar Wiechers

インデックスn-1を使用して、要素に配列アイテムとしてアクセスすることもできます。これは、パイプをチェーンするよりも簡潔に思えます。

$third = (Get-ChildItem -Path $dir | Sort-Object CreationTime -Descending)[2]
2
theta-fish

@AnsgarWiechersによって提案された2番目のアプローチは、次のように簡単に再利用可能な機能に変えることができます。

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

最初のアイテム

gci > out.txt
Get-Content out.txt | Select -Index 7 | Format-list

2番目のアイテム

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 
}

注:最初の7行は空で、説明行は空です。

1
MahmutKarali