Import-Csv - 成员已存在问题

时间:2017-06-28 15:33:29

标签: powershell csv

我必须将多个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 

我最终得错了

  

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

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

1 个答案:

答案 0 :(得分:4)

  

其中一个列标题相同

这意味着每个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

}

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

Import-Csv -Path $NewFileNames -Header 'Col1', 'Col2', 'Url1', 'Url2' | Export-Csv ...