如何用PowerShell合并同表头多CSV文件并保留单个表头
问题
我在文件夹D:\reports\daily_csv中有多个表头相同的CSV文件,示例如下:
file1
"Index","Response","Status","Time" "32190","2","Succeeded","2023-01-18 08:31:34.9" "32189","3","Succeeded","2023-01-18 08:26:34.9" "32188","3","Succeeded","2023-01-18 08:21:34.9"
file2
"Index","Response","Status","Time" "32190","2","Succeeded","2023-01-19 08:31:34.9" "32189","3","Succeeded","2023-01-19 08:26:34.9" "32188","3","Succeeded","2023-01-19 08:21:34.9"
需要将这些文件合并为仅含单个表头的CSV文件,目标格式如下:
"Index","Response","Status","Time" "32190","2","Succeeded","2023-01-18 08:31:34.9" "32189","3","Succeeded","2023-01-18 08:26:34.9" "32188","3","Succeeded","2023-01-18 08:21:34.9" "32190","2","Succeeded","2023-01-19 08:31:34.9" "32189","3","Succeeded","2023-01-19 08:26:34.9" "32188","3","Succeeded","2023-01-19 08:21:34.9"
我使用了以下PowerShell代码,但无法实现单个表头的效果,请问需要添加什么内容来避免重复表头?
$folder = 'D:\reports\daily_csv' $files = Get-ChildItem $folder\*.csv Get-Content $files | Set-Content "D:\Monthly\Merged_$prev_month.csv"
解决方案
提供两种可靠的实现方式,按需选择:
方法1:直接操作文本行(适合确认表头完全一致场景)
提取第一个文件的完整内容(含表头),后续文件跳过第一行表头后追加:
$folder = 'D:\reports\daily_csv' $files = Get-ChildItem $folder\*.csv # 写入第一个文件的全部内容(包含表头) Get-Content $files[0] | Set-Content "D:\Monthly\Merged_$prev_month.csv" # 遍历剩余文件,跳过第一行表头后追加内容 foreach ($file in $files[1..($files.Count-1)]) { Get-Content $file | Select-Object -Skip 1 | Add-Content "D:\Monthly\Merged_$prev_month.csv" }
方法2:用PowerShell CSV cmdlet自动处理(推荐)
利用Import-Csv和Export-Csv自动识别表头并合并数据,无需手动处理行,还能兼容字段顺序不一致的情况(字段名需一致):
$folder = 'D:\reports\daily_csv' $files = Get-ChildItem $folder\*.csv # 导入所有CSV数据,导出时自动保留单个表头 Import-Csv $files | Export-Csv -Path "D:\Monthly\Merged_$prev_month.csv" -NoTypeInformation
两种方法对比
- 方法1:严格保留原始文本格式,但要求所有文件表头完全一致,否则会导致数据错位。
- 方法2:PowerShell官方推荐的CSV处理方式,自动处理表头、编码问题,容错性更强,优先推荐。
内容的提问来源于stack exchange,提问作者Empty Coder
相关产品推荐
相关产品推荐

