我有一个包含文本文件的目录,我需要遍历并删除每个文件中的第一行和最后一行。之后,我需要将它们连接起来,并将输出设置为一个文件。
我的问题是,当我循环遍历目录时,它只操作第一个文件,然后停止。我该如何逐一浏览呢?
我代码:
$path = 'C:RemoveFirst*.txt'
$output = 'C:RemoveFirstWork.txt'
for ($i = 0; $i -lt $path.Count; $i++) {
Get-Content $path | Select-Object -Skip 1 | Select-Object -SkipLast 1 | Set-Content $output
}
这个也可以:
$path = 'C:RemoveFirst*.txt'
$outfile = 'C:RemoveFirstWork.txt'
Get-ChildItem $path|foreach-object{
Get-Content $_|select-object -Skip 1|select-object -SkipLast 1
} > $outfile
这应该能奏效:
$path = 'C:RemoveFirst*.txt'
$output = 'C:RemoveFirstWork.txt'
Get-Item $path | ForEach-Object {
# Output all except first and last line of current file
Get-Content $_ | Select-Object -Skip 1 | Select-Object -SkipLast 1
'' # Output an empty line at the end of each file
} | Set-Content $output
Get-Item
在路径包含通配符时循环遍历所有匹配的元素。ForEach-Object
使Select-Object
语句分别对每个文件进行操作。否则,它们将应用于所有文件的行连接流,从而只跳过第一个文件的第一行和最后一个文件的最后一行。- 最后使用
Set-Content
将所有行连接到一个文件中。或者使用Out-File
,查看这篇文章的差异。