Powershell使用ConvertFrom-Csv处理CSV字符串及提取列导出文件问题
PowerShell CSV变量操作解决方案
1. 读取CSV字段并赋值给变量
你的核心问题是没有将ConvertFrom-Csv转换后的结构化对象保存到变量,原始$Data始终是字符串类型,所以$Data[0]只会返回字符串的第一个字符。
正确操作如下:
# 转换CSV字符串为结构化对象并存储到变量 $csvObj = $Data | ConvertFrom-Csv -Header Header1,Header2,Header3,Header4,Header5,Header6,Header7 # 直接读取对应字段值并赋值给变量 $header1Value = $csvObj.Header1 $header2Value = $csvObj.Header2 # 其他字段以此类推
2. 筛选指定列生成新CSV并写入文件
你需要的第2、3、6、7列对应表头为Header2、Header3、Header6、Header7,配合Select-Object筛选字段即可:
生成新CSV字符串
# 筛选字段后转换为CSV字符串,-NoTypeInformation用于去掉冗余的类型说明行 $newCsvStr = $csvObj | Select-Object Header2,Header3,Header6,Header7 | ConvertTo-Csv -NoTypeInformation
写入CSV文件
无需手动处理字符串,直接用Export-Csv更稳妥,可自动处理格式转义:
$csvObj | Select-Object Header2,Header3,Header6,Header7 | Export-Csv -Path "./new_output.csv" -NoTypeInformation -Encoding UTF8
添加-Encoding UTF8参数可避免乱码问题,可根据需要调整编码类型。
完整测试代码
# 初始化原始CSV字符串变量 $Data = "test1,test2,test3,1234,5678,1/1/2021,12/31/2021" # 转换为结构化对象 $csvObj = $Data | ConvertFrom-Csv -Header Header1,Header2,Header3,Header4,Header5,Header6,Header7 # 验证字段读取 Write-Host "--------Value from CSV object----------------------------------------" Write-Host "Header1的值:" $csvObj.Header1 Write-Host "Header2的值:" $csvObj.Header2 Write-Host "-----------------------------------------------------------------" # 生成新CSV字符串 $newCsvStr = $csvObj | Select-Object Header2,Header3,Header6,Header7 | ConvertTo-Csv -NoTypeInformation Write-Host "新CSV字符串:`n$newCsvStr" # 写入文件 $csvObj | Select-Object Header2,Header3,Header6,Header7 | Export-Csv -Path "./new_output.csv" -NoTypeInformation -Encoding UTF8
补充说明
- 如果原始CSV字符串包含多行数据,转换后的
$csvObj为对象数组,可通过$csvObj[0]、$csvObj[1]的方式读取对应行的字段 - 处理CSV场景下优先使用官方提供的
ConvertFrom-Csv/Export-Csvcmdlet,比手动拆分字符串容错性更高
内容的提问来源于stack exchange,提问作者HurricaneCoffee
相关产品推荐
相关产品推荐

