将目录中的csv文件合并到单个csv文件PowerShell中

时间:2018-04-05 21:23:13

标签: powershell

如何运行一个串行执行以下操作的PowerShell脚本?

  1. 使用此脚本将目录中所有csv文件的文件名添加为每个文件末尾的列:

    Get-ChildItem *.csv | ForEach-Object {
    $CSV = Import-CSV -Path $_.FullName -Delimiter ","
    $FileName = $_.Name
    
    $CSV | Select-Object *,@{N='Filename';E={$FileName}} | Export-CSV $_.FullName -NTI -Delimiter ","}
    
  2. 将目录中的所有csv文件合并为一个csv文件

  3. 仅保留第一个csv的标题(第一行),并排除文件中的所有其他第一行。

    类似于kemiller2002所做的here,除了一个带有csv输入和csv输出的脚本。

3 个答案:

答案 0 :(得分:2)

Bill的答案允许您组合CSV,但不会将文件名添加到每行的末尾。我认为最好的方法是使用PipelineVariable通用参数在ForEach循环中添加它。

Get-ChildItem \inputCSVFiles\*.csv -PipelineVariable File |
  ForEach-Object { Import-Csv $_ | Select *,@{l='FileName';e={$File.Name}}} |
  Export-Csv \outputCSVFiles\newOutputFile.csv -NoTypeInformation

这应该可以实现你所寻找的目标。

答案 1 :(得分:1)

这是一般模式:

Get-ChildItem \inputCSVFiles\*.csv |
  ForEach-Object { Import-Csv $_ } |
  Export-Csv \outputCSVFiles\newOutputFile.csv -NoTypeInformation

确保输出CSV文件具有不同的文件名模式,或使用不同的目录名称(如本例所示)。

答案 2 :(得分:0)

如果你的csv文件总是没有相同的标题,你可以这样做:

a = *((double*) params)