PowerShell实现文件夹内文件前两行输出时文件名仅作一次标题
问题:批量提取.4th文件前两行并以文件名作为标题
我希望打印文件夹中每个.4th文件的前两行,并将文件名作为标题。当前使用的PowerShell代码如下:
Get-ChildItem *.4th | % {$filename = $_.Name ( $_| Get-Content -First 2) | % { "{0}`r`n{1}`r`n" -f $filename, $_ }}
该代码可运行,但会将文件的两行作为独立项处理,导致文件名重复显示,示例输出如下:
zigzag.4th \ Taken from xxxxx zigzag.4th \ 4tH version 2010, xxx
想要实现的效果是每个文件名仅显示一次,下方紧跟对应文件的前两行,即:
zigzag.4th \ Taken from xxxxx \ 4tH version 2010, xxx
解决方案
问题出在嵌套的ForEach-Object循环:内层循环会对文件的每一行都拼接一次文件名和行内容,导致文件名重复输出。调整逻辑,对每个文件先单独输出文件名,再直接返回前两行内容即可:
Get-ChildItem *.4th | ForEach-Object { # 输出当前文件名作为标题 $_.Name # 输出该文件的前两行内容 Get-Content $_.FullName -First 2 # 可选:在不同文件的输出之间添加空行分隔 "" }
说明
- 外层循环遍历所有
.4th文件,对每个文件先输出一次文件名; - 接着用
Get-Content -First 2直接提取并输出该文件的前两行; - 最后一行的
""用于在不同文件的输出之间添加空行,让结果更易读,不需要的话可以删掉。
内容的提问来源于stack exchange,提问作者Antoni Gual Via
相关产品推荐
相关产品推荐

