PowerShell导出至CSV:新增列添加数据需求及脚本问题
修正后的PowerShell脚本(满足导入姓名列表并追加新列需求)
先明确原脚本的几个关键问题:
- 用
Import-Csv读取纯文本文件(ReadData.txt)是错误的,纯文本文件需用Get-Content读取 - 新列的值错误绑定为整个CSV对象,应对应读取到的姓名条目
- 日期列名在循环内重复获取,冗余且可能出现不一致
- 未处理目标CSV文件不存在的情况,首次运行会直接报错
下面是完全匹配需求的修正脚本:
# 姓名列表文本文件路径 $nameListPath = "C:\Temp\ReadData.txt" # 目标CSV文件路径 $targetCsvPath = "C:\Temp\IPTest.csv" # 读取文本文件中的姓名列表(每行一个姓名) $names = Get-Content -Path $nameListPath # 设置新列的列名(当前日期,格式为MM/dd/yyyy) $newColumnName = Get-Date -Format "MM/dd/yyyy" # 处理目标CSV:存在则导入已有数据,不存在则创建对应行数的空数据集 if (Test-Path -Path $targetCsvPath) { $csvData = Import-Csv -Path $targetCsvPath # 确保现有行数量与姓名列表一致,避免数据错位 while ($csvData.Count -lt $names.Count) { $csvData += [PSCustomObject]@{} } } else { # 首次运行,创建与姓名列表行数匹配的空行集合 $csvData = for ($i=0; $i -lt $names.Count; $i++) { [PSCustomObject]@{} } } # 为每一行追加新列及对应姓名 for ($i=0; $i -lt $csvData.Count; $i++) { $csvData[$i] | Add-Member -MemberType NoteProperty -Name $newColumnName -Value $names[$i] } # 保存更新后的CSV(基于原有数据追加新列,不会覆盖原有内容) $csvData | Export-Csv -Path $targetCsvPath -NoTypeInformation -Encoding UTF8
核心逻辑说明
- 姓名读取:通过
Get-Content读取纯文本格式的姓名列表,默认每行对应一个姓名 - CSV兼容处理:自动判断目标CSV是否存在,首次运行创建空数据集,后续运行导入原有数据并对齐行数
- 新列追加:以当前日期作为列名,将姓名列表逐条对应到CSV的每一行
- 数据保存:基于原有数据追加新列后覆盖原文件,确保原有列数据完全保留
内容的提问来源于stack exchange,提问作者DuaneM
相关产品推荐
相关产品推荐

