排除powershell中的索引

排除powershell中的索引,powershell,Powershell,我有一个非常简单的要求,删除文件中的几行。我在网上发现了一些帮助,在那里我们可以利用索引。假设我想选择我使用的第五行 Get-Content file.txt | Select -Index 4 同样,如果我不需要第五和第六行怎么办?声明将如何改变 Get-Content file.txt | Select -Index -ne 4 我尝试在索引和数字之间使用-ne。它不起作用。“!=”也没有 下面的代码也没有给出错误,但没有给出所需的输出 $tmp = $test | where {

我有一个非常简单的要求,删除文件中的几行。我在网上发现了一些帮助,在那里我们可以利用索引。假设我想选择我使用的第五行

Get-Content file.txt | Select -Index 4
同样,如果我不需要第五和第六行怎么办?声明将如何改变

Get-Content file.txt | Select -Index -ne 4
我尝试在索引和数字之间使用-ne。它不起作用。“!=”也没有

下面的代码也没有给出错误,但没有给出所需的输出

$tmp = $test  |   where {$_.Index -ne 4,5 }

不知道
索引
属性或参数,但也可以这样实现:

$count = 0
$exclude = 4, 5
Get-Content "G:\input\sqlite.txt" | % {
    if($exclude -notcontains $count){ $_ }
    $count++
}
编辑:

ReadCount
属性保存您需要的信息:)


警告:正如@PetSerAl和@Matt所指出的,
ReadCount
从1开始,而不是从0开始,就像数组一样,管道元素没有
索引
自动属性,但是如果您愿意,您可以添加它:

function Add-Index {
    begin {
        $i=-1
    }
    process {
        Add-Member Index (++$i) -InputObject $_ -PassThru
    }
}
然后,您可以通过
索引
应用筛选:

Get-Content file.txt | Add-Index | Where-Object Index -notin 4,5
试试这个:

get-content file.txt | select -index (0..3 + 5..10000)

这是一个有点黑客,但它的工作。缺点是建立这个范围需要一些时间。另外,调整10000以确保获得整个文件

将其转换为数组,并使用RemoveRange方法(ind index,int count)


管道元素不会从Get Content返回:
ReadCount
@Matt
ReadCount
是有效的解决方案,但它不是零基的,这与PowerShell中通常使用的索引不同,因此您必须考虑到这一点。当然。。。我在回答中写道,在我重读索达维洛汉克斯之前,我已经添加了一个警告
get-content file.txt | select -index (0..3 + 5..10000)
[System.Collections.ArrayList]$text  = gc C:\file.txt
$text.RemoveRange(4,1)
$text