使用PowerShell将TXT转CSV时如何追加文件名和最后写入时间列
PowerShell TXT批量转CSV新增文件信息列修正方案
问题原因
你修改后的代码未生效主要是以下几个问题:
Get-ChildItem -literalpath $filename | Select Name返回的是带Name属性的自定义对象,不是纯文本文件名,存入CSV后会显示为@{Name=xxx.txt}这类异常内容- 缺少获取文件最后写入时间的逻辑
- 分割每行键值对时没有处理前后空格,会导致列名、值带多余空白
- 原
$files仅为路径字符串,没有实际遍历目标路径下的所有TXT文件
修正后完整代码
# 修改为你的TXT文件所在文件夹路径 $targetPath = "C:\你的TXT文件存放目录" # 获取目录下所有后缀为txt的文件对象 $files = Get-ChildItem -LiteralPath $targetPath -Filter *.txt -File function Get-Data { param ( [Parameter (Mandatory, ValueFromPipeline, Position=0)] $file ) $data = @{} # 直接从文件对象提取所需属性 $data.Add("Filename", $file.Name) $data.Add("LastWriteTime", $file.LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss')) $lines = Get-Content -LiteralPath $file.FullName | Where-Object {$_ -notlike '*---*'} foreach ($line in $lines) { # 分割时限制最多分割为2段,避免值本身包含冒号时出错 $splitLine = $line.Split(":", 2) # 去除键和值的前后空白 $key = $splitLine[0].Trim() $value = $splitLine[1].Trim() $data.Add($key, $value) } return [PSCustomObject]$data } $files | ForEach-Object { Get-Data $_ } | Export-Csv -Path E:\Scripts\Pico2.csv -NoTypeInformation -Force -Encoding UTF8
核心改动说明
- 直接获取目标路径下所有TXT文件对象,后续可直接读取文件的全路径、文件名、写入时间等属性,无需重复查询文件系统
- 修正文件名取值错误,直接取文件对象的
Name属性获取纯文本文件名 - 新增
LastWriteTime列,时间格式可按需调整 - 优化键值对分割逻辑,避免值包含冒号时分割异常,同时去除多余空白
- 导出CSV时指定UTF8编码,避免中文内容或文件名乱码
内容的提问来源于stack exchange,提问作者Eric S
相关产品推荐
相关产品推荐

