如何从powershell中的集合中提取范围?

时间:2012-07-11 09:01:25

标签: powershell range extract

我有很多项目,我想从中提取项目。我需要从开始跳过一些项目,从结束跳过一些。

以下示例已简化。

我首先尝试提取边界元素:

> ("a", "b", "c", "d", "e")[1,-2]
b
d  

这可以按预期工作。

然而,当我尝试提取整个范围时,它返回的东西比我想要的更多(与Python的['a', 'b', 'c', 'd', 'e'][1:-1]相比,效果很好)。

> ("a", "b", "c", "d", "e")[1..-2]
b
a
e
d  

它反过来循环。如何改变循环的方向?

我想得到:b c d

有没有使用集合的实际长度的解决方案?

3 个答案:

答案 0 :(得分:5)

1 ..- 2将从第一项开始计算,直到最后两项。将数组保存到变量并通过计算数组长度减去末尾的项目来指定上限。

$a = "a", "b", "c", "d", "e"
$a[1..($a.length-2)]

答案 1 :(得分:3)

由于范围运算符不能满足您的要求,因此简单的管道可以完成手头的任务,但这可能会影响大型集合的性能。

从一个集合开始,以及从顶部和底部修剪的元素数量:

$a = "a", "b", "c", "d", "e"
($fromTop,$fromBottom) = 1, 2

使用此...

$a | select -skip $fromTop | select -skip $fromBottom -last 1000000

...或者,如果您安装了PSCX,这个更简洁优雅的序列:

$a | skip -first $fromTop -last $fromBottom

这两个都没有明确使用length属性返回b c。调整两个参数以将输出调整到不同的范围。

答案 2 :(得分:1)

要删除前两个,你可以这样做:

$null,$null,$a = "a", "b", "c", "d", "e"