Select 第二个或第三个对象/元素
Select second or third object / element
我想 select 我的 PowerShell 脚本中 Get-ChildItem
语句的 second/third/forth 对象。这给了我第一个:
$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
我想要第二个,或者第三个,或者第四个。 (不是前两个等等)。
有办法吗?
对于select第n个元素跳过前n-1个元素:
$third = Get-ChildItem -Path $dir |
Sort-Object CreationTime -Descending |
<b>Select-Object -Skip 2 |</b>
Select-Object -First 1
或select前n个和最后一个元素:
$third = Get-ChildItem -Path $dir |
Sort-Object CreationTime -Descending |
<b>Select-Object -First 3 |
Select-Object -Last 1</b>
但是请注意,如果输入的元素少于 n 个,这两种方法将产生不同的结果。在这种情况下,第一种方法将 return $null
,而第二种方法将 return 最后一个可用元素。根据您的要求,您可能需要选择其中之一。
@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
第一项
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
}
注意:前七行是空行和描述行。
您还可以使用索引 n-1 将元素作为数组项进行访问。这似乎比链接管道更简洁。
$third = (Get-ChildItem -Path $dir | Sort-Object CreationTime -Descending)[2]
我想 select 我的 PowerShell 脚本中 Get-ChildItem
语句的 second/third/forth 对象。这给了我第一个:
$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
我想要第二个,或者第三个,或者第四个。 (不是前两个等等)。
有办法吗?
对于select第n个元素跳过前n-1个元素:
$third = Get-ChildItem -Path $dir |
Sort-Object CreationTime -Descending |
<b>Select-Object -Skip 2 |</b>
Select-Object -First 1
或select前n个和最后一个元素:
$third = Get-ChildItem -Path $dir |
Sort-Object CreationTime -Descending |
<b>Select-Object -First 3 |
Select-Object -Last 1</b>
但是请注意,如果输入的元素少于 n 个,这两种方法将产生不同的结果。在这种情况下,第一种方法将 return $null
,而第二种方法将 return 最后一个可用元素。根据您的要求,您可能需要选择其中之一。
@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
第一项
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
}
注意:前七行是空行和描述行。
您还可以使用索引 n-1 将元素作为数组项进行访问。这似乎比链接管道更简洁。
$third = (Get-ChildItem -Path $dir | Sort-Object CreationTime -Descending)[2]