PowerShell导出CSV如何将多行字符串拆分写入不同数据行
错误原因
两种方案均未正确构造逐行对应的结构化CSV记录,具体问题如下:
- 第一种方案主动将换行替换为逗号,且将整个内容数组作为单个
Orders属性的值传入对象,Export-Csv遇到数组类型的属性值时,会自动将数组合并为单个分隔字符串写入同一行,无法生成多行记录。 - 第二种方案手动拼接引号的逻辑不符合CSV标准转义规则,且未逐行构造记录,直接将整组行数据作为单条内容传入
Add-Content,必然出现内容合并、格式错乱。
正确实现代码
# 拆分多行字符串为独立行,去除首尾空格,过滤拆分产生的空行 $orderRows = $var2 -split '\r?\n' | ForEach-Object { $_.Trim() } | Where-Object { $_ } # 逐行生成匹配CSV结构的对象,仅第一行填充Id number值 $csvRecords = for ($idx = 0; $idx -lt $orderRows.Count; $idx++) { [PSCustomObject]@{ # PowerShell 5.1版本可将下一行替换为 "Id number" = if ($idx -eq 0) { $var1 } else { $null } "Id number" = $idx -eq 0 ? $var1 : $null "Orders" = $orderRows[$idx] } } # 导出为标准格式CSV,指定UTF8编码避免特殊字符乱码 $csvRecords | Export-Csv -Path $filepath -NoTypeInformation -Encoding UTF8
导出效果
生成的CSV完全符合需求:
- 首行为标准表头:
"Id number","Orders" - 第一行数据
Id number列填入89631,Orders列对应$var2第一行内容0236593 - 后续所有数据行
Id number列留空,Orders列依次对应$var2拆分后的每行内容 - 自动完成CSV标准转义,不会出现引号异常、内容错位问题
内容的提问来源于stack exchange,提问作者HAH
相关产品推荐
相关产品推荐

