您已经很接近了,我只需通过您的代码中的 Where 子句通过管道跳过每个文件中的第 1 项和第 -1 项。像这样:
(gci *.csv )|ForEach{
$file = $_
$contents = gc $file
$contents | Where{$_ -ne $contents[1] -and $_ -ne $contents[-1]} | out-file $file.fullname -force
}
我做了 ForEach 内联以确保 GCI 完成并且在您尝试执行 Out-File 时没有保持任何打开
编辑:我刚刚意识到我的代码有一个潜在的缺陷,如果你在第 2 行或最后一行有重复的行,这些行也会被删除。我写这篇文章是假设你有类似下面的东西想要清理:
Col1,Col2,Col3,Col4
---- ---- ---- ----
Data,data,data,data
data,data,data,data
Log Created: 02/04/2015
您想删除 --- 行和日志在末尾创建的注释。
Edit2: 更好的解决方案可能是获取文件的内容,输出第一行,然后输出第 3 行到最后(减去 1 行)并将其附加到同一行文件。比如:
(gci *.csv )|ForEach{
$Path = $_.FullName
$content = gc $Path
$content|select -first 1|Out-File $Path -force
$content[2..($content.count-2)]|Out-File $Path -Append
}