Powershell如何循环浏览目录中的各个文件

Powershell如何循环浏览目录中的各个文件,powershell,loops,parsing,Powershell,Loops,Parsing,我有一个包含文本文件的目录,需要循环浏览并删除每个文件中的第一行和最后一行。之后,我需要连接它们,并将输出设置为一个文件 我的问题是,当我在目录中循环时,它只是在处理第一个文件,然后停止。我怎样才能一一过目 我的代码: $path = 'C:\RemoveFirst\*.txt' $output = 'C:\RemoveFirst\Work.txt' for ($i = 0; $i -lt $path.Count; $i++) { Get-Content $path | Select-

我有一个包含文本文件的目录,需要循环浏览并删除每个文件中的第一行和最后一行。之后,我需要连接它们,并将输出设置为一个文件

我的问题是,当我在目录中循环时,它只是在处理第一个文件,然后停止。我怎样才能一一过目

我的代码:

$path = 'C:\RemoveFirst\*.txt'
$output = 'C:\RemoveFirst\Work.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'
$output = 'C:\RemoveFirst\Work.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
    将所有行连接到一个文件中。或者使用
    输出文件
    ,请参阅以了解差异
这同样有效:

$path = 'C:\RemoveFirst\*.txt'
$outfile = 'C:\RemoveFirst\Work.txt'

Get-ChildItem $path|foreach-object{
    Get-Content $_|select-object -Skip 1|select-object -SkipLast 1
} > $outfile

如果您想使用显式循环,请查看
Get Help about_Foreach
当我这样做时,出于某种原因,它会连接所有文件,然后删除输出文件的第一行和最后一行,而不是像我需要的单个文件,我也不需要循环,这只是我正在尝试的一种方式,非常有效!非常感谢。在此基础上,如果我想在每个文件的末尾添加一个空格,以使其更具可读性,该如何做?@GarrettStarkey请参阅更新的答案。这看起来是一个很好的解决方案!我建议将别名替换为完整的命令名,以便于搜索它们的文档。任何喜欢使用别名的人都可以在文档中查找别名。你是对的,我已经习惯了linux命令,几乎忘记了它们的cmdlet名称。。。