PowerShell合并CSV文件时行尾符与引号异常问题咨询
PowerShell合并CSV异常问题解决方案
你使用的原命令存在两个配置缺失,对应修改方案如下:
问题根因说明
- 引号异常:原始CSV使用
|作为字段分隔符,但Import-Csv、Export-Csv默认分隔符为逗号,字段解析错误导致引号转义异常。 - 行尾为CRLF:Windows环境下PowerShell原生
Export-Csv默认输出行尾符为CRLF,低版本PowerShell无内置参数直接修改。
适配不同PowerShell版本的解决方案
方案1:PowerShell 7+ 版本(推荐)
PowerShell 7及以上版本的Export-Csv内置-NewLine参数可直接指定行尾符,修改后命令如下:
# 自动创建输出目录,避免目录不存在报错 New-Item -ItemType Directory -Path .\merged -Force | Out-Null Get-ChildItem -Filter *.csv | Select-Object -ExpandProperty FullName | Import-Csv -Delimiter '|' | Export-Csv -Path .\merged\merged.csv -Delimiter '|' -NoTypeInformation -Append -NewLine "`n"
方案2:Windows PowerShell 5.1 版本
低版本PowerShell无-NewLine参数,需手动处理换行符后写入文件,命令如下:
# 自动创建输出目录,避免目录不存在报错 New-Item -ItemType Directory -Path .\merged -Force | Out-Null # 读取并转换CSV内容 $csvContent = Get-ChildItem -Filter *.csv | Select-Object -ExpandProperty FullName | Import-Csv -Delimiter '|' | ConvertTo-Csv -Delimiter '|' -NoTypeInformation # 替换所有CRLF为LF $csvContent = $csvContent -join "`n" -replace "`r`n", "`n" # 写入文件,可根据原始CSV编码调整Encoding参数,例如[System.Text.Encoding]::GetEncoding('gb2312') [System.IO.File]::WriteAllText('.\merged\merged.csv', $csvContent + "`n", [System.Text.Encoding]::UTF8)
关键修改点说明
- 给
Import-Csv、Export-Csv/ConvertTo-Csv都添加-Delimiter '|'参数,明确匹配原始CSV的竖线分隔符,解决引号转义异常问题。 - PowerShell 7+ 直接通过
-NewLine "n"`指定行尾符为LF;低版本通过字符串替换+ .NET文件写入方法控制行尾符格式,避免默认输出CRLF。
内容的提问来源于stack exchange,提问作者Cam
相关产品推荐
相关产品推荐

