You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell遍历文本文件目录,如何追加文件名与最后一行到新文件?

问题描述

我需要遍历一个包含多个文本文件的目录,文本内容示例:

Mark.Stevens;Wed 03/11/2020; 8:02:23.83
Paul.Robinson;Wed 03/11/2020; 9:52:24.78

文件名格式例如CII1234567.txt,希望提取每个文件的文件名以及文件的最后一行内容,理想输出格式:

CII1234567.txt Mark.Stevens;Wed 03/11/2020; 8:02:23.83
CII1234567.txt Paul.Robinson;Wed 03/11/2020; 9:52:24.78

当前使用的PowerShell脚本:

$textfiles = (Get-ChildItem C:\Users\KP\Downloads\Test\Workstations | Where-Object {$_.Extension -eq '.txt'}).FullName
ForEach ($textfile in $textfiles) {
Get-content $textfile -Tail 1 >> C:\Users\KP\Downloads\Test\Output.txt
Get-content $textfile.Basename >> C:\Users\KP\Downloads\Test\Output.txt
}

运行后仅能获取文件内容,无法提取文件名,求修改脚本实现需求。

解决方案

你的问题核心有两个:一是$textfile是字符串类型的完整路径,无法直接调用.Basename属性;二是当前脚本将文件名和内容分两行写入,不符合目标格式。以下是两种可行的修改方案:

方案一:调整对象类型并拼接输出

# 获取FileInfo对象而非仅完整路径字符串
$textfiles = Get-ChildItem C:\Users\KP\Downloads\Test\Workstations | Where-Object {$_.Extension -eq '.txt'}
ForEach ($textfile in $textfiles) {
    # 读取文件最后一行
    $lastLine = Get-Content $textfile.FullName -Tail 1
    # 拼接文件名与内容,用制表符分隔保证对齐
    "$($textfile.Name)`t$lastLine" >> C:\Users\KP\Downloads\Test\Output.txt
}

方案二:更高效的管道写法

Get-ChildItem C:\Users\KP\Downloads\Test\Workstations -Filter *.txt | ForEach-Object {
    # 直接通过FileInfo对象获取文件名,拼接最后一行内容
    "$($_.Name)`t$(Get-Content $_.FullName -Tail 1)"
} | Out-File C:\Users\KP\Downloads\Test\Output.txt -Append

关键说明

  • 保留Get-ChildItem返回的FileInfo对象,才能直接访问.Name(带扩展名的完整文件名)或.Basename(不带扩展名的文件名)属性。
  • 使用制表符\t分隔文件名和内容,比手动加空格更易保持输出整齐,也可根据需求替换为多个空格。
  • 管道写法减少了文件的重复打开/关闭操作,在处理大量文件时效率更高。

内容的提问来源于stack exchange,提问作者user20661204

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 17:31:13