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名称。。。