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つなどではありません)。
方法はありますか?
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番目のアプローチは最後に使用可能な要素を返します。要件に応じて、どちらかを選択する必要があります。
インデックスn-1を使用して、要素に配列アイテムとしてアクセスすることもできます。これは、パイプをチェーンするよりも簡潔に思えます。
$third = (Get-ChildItem -Path $dir | Sort-Object CreationTime -Descending)[2]
@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
最初のアイテム
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行は空で、説明行は空です。