Import-Csv-成员已经存在的问题

Mic*_*ian 5 csv powershell

我必须将多个CSV文件合并为一个文件。每个CSV都有一个标头。列标题之一是相同的。理想情况下,最终文件(all_out.csv)必须具有单个标头。

我运行PowerShell代码:

Import-Csv out_1_result.csv,out_2_result.csv,out_3_result.csv,out_4_result.csv,out_5_result.csv,out_6_result.csv,out_7_result.csv,out_8_result.csv,out_9_result.csv,out_10_result.csv,out_11_result.csv,out_12_result.csv,out_13_result.csv,out_14_result.csv,out_15_result.csv,out_16_result.csv,out_17_result.csv,out_18_result.csv,out_19_result.csv,out_20_result.csv,out_21_result.csv,out_22_result.csv,out_23_result.csv,out_24_result.csv,out_25_result.csv,out_26_result.csv,out_27_result.csv,out_28_result.csv |
    Export-Csv all_out.csv -NoType 
Run Code Online (Sandbox Code Playgroud)

我最终遇到一个错误

Import-Csv:成员“ URL”已经存在。

有没有办法忽略/解决这个问题?

Tes*_*ler 5

列标题之一相同

这意味着每个CSV都有两列标题“ URL”? Import-Csv创建每个标头都变为属性名的对象,例如@{Id=10; Url='example.com'} ,再次使用相同的名称将发生冲突。

如果您不更改csv文件,则无法正常工作,因为仅使用Import-Csv cmdlet就无法说“使用不同的列名”和“跳过标题行”。

我能想到的最简单的更改是从每个标题行中删除标题行,例如:

$CsvFiles = 'out_1_result.csv','out_2_result.csv','out_3_result.csv','out_4_result.csv','out_5_result.csv','out_6_result.csv','out_7_result.csv','out_8_result.csv','out_9_result.csv','out_10_result.csv','out_11_result.csv','out_12_result.csv','out_13_result.csv','out_14_result.csv','out_15_result.csv','out_16_result.csv','out_17_result.csv','out_18_result.csv','out_19_result.csv','out_20_result.csv','out_21_result.csv','out_22_result.csv','out_23_result.csv','out_24_result.csv','out_25_result.csv','out_26_result.csv','out_27_result.csv','out_28_result.csv'

$NewFileNames = $CsvFiles | ForEach-Object { 

    $NewFileName = $_ + "_noheader.csv"

    Get-Content $_ | Select-Object -Skip 1 | Set-Content $NewFileName -Encoding UTF8

    $NewFileName   # write new name to output stream

}
Run Code Online (Sandbox Code Playgroud)

然后,当它们没有标题行时,将它们全部导入并指定标题行作为参数

Import-Csv -Path $NewFileNames -Header 'Col1', 'Col2', 'Url1', 'Url2' | Export-Csv ...
Run Code Online (Sandbox Code Playgroud)