Powershell 3:删除文本文件的最后一行

时间:2015-08-04 08:44:01

标签: powershell powershell-v3.0

我使用以下脚本迭代文件夹中的文件列表,然后它将正则表达式搜索包含' T | 0-9'这是预告片记录,将出现在每个文本文件的末尾。

$path = "D:\Test\"
$filter =  "*.txt"
$files = Get-ChildItem -path $path -filter $filter

foreach ($item in $files)

{
            $search = Get-content $path$item
            ($search)| ForEach-Object { $_ -replace 'T\|[0-9]*', '' } | Set-Content $path$item

}

这个脚本运行正常,但是,通过大文件可能需要很长时间,因此我使用了' -tail 5'参数,以便它将从最后5行开始搜索,问题是它正在删除所有内容,只留下Feed中的最后一行。

还有其他方法来实现吗?

我尝试了另一个我发现的示例代码,但它确实没有用,有人可以指导我

$stream = [IO.File]::OpenWrite($path$item)
$stream.SetLength($stream.Length - 2)
$stream.Close()
$stream.Dispose()

1 个答案:

答案 0 :(得分:2)

由于Get-Content返回array,您可以使用[-1]访问最后一项(最后一行):

foreach ($item in $files)
{
    $search = Get-content $item.FullName
    $search[-1] = $search[-1] -replace 'T\|[0-9]*', ''
    $search | Set-Content $item.FullName
}