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

使用PowerShell将TXT转CSV时如何追加文件名和最后写入时间列

PowerShell TXT批量转CSV新增文件信息列修正方案

问题原因

你修改后的代码未生效主要是以下几个问题:

  1. Get-ChildItem -literalpath $filename | Select Name返回的是带Name属性的自定义对象,不是纯文本文件名,存入CSV后会显示为@{Name=xxx.txt}这类异常内容
  2. 缺少获取文件最后写入时间的逻辑
  3. 分割每行键值对时没有处理前后空格,会导致列名、值带多余空白
  4. 原$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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:36:03