Powershell,将CSV文件与文件名合并

Powershell,将CSV文件与文件名合并,csv,powershell,merge,Csv,Powershell,Merge,大家好,我正在尝试将具有相同列数的多个csv文件合并到一个文件中,并使用一个显示文件名的额外列名,下面是我想要的示例: file01.csv c01,c02,c03,c04,c05 A,1,4,2,3 B,5,4,6,4 file02.csv c01、c02、c03、c04、c05 C、 2,4,5,6 D、 2,4,1,3 预期结果 merged.csv c01,c02,c03,c04,c05,Name A,1,4,2,3,file01.csv B,5,4,6,4,file01.csv C

大家好,我正在尝试将具有相同列数的多个csv文件合并到一个文件中,并使用一个显示文件名的额外列名,下面是我想要的示例:

file01.csv
c01,c02,c03,c04,c05
A,1,4,2,3
B,5,4,6,4
file02.csv
c01、c02、c03、c04、c05
C、 2,4,5,6
D、 2,4,1,3
预期结果

merged.csv
c01,c02,c03,c04,c05,Name
A,1,4,2,3,file01.csv
B,5,4,6,4,file01.csv
C,2,4,5,6,file02.csv
D,2,4,1,3,file02.csv
我用这个密码试过了。它合并了所有文件,但没有显示文件名:

Get ChildItem“*.csv”|%{Import csv-header c01、c02、c03、c04、c05$|FullName |选择对象c01、c02、c03、c04、c05,@{e=“$.basename”;n=“Name”| Export csv Merged.csv}

您的文件和输出不是真正的CSV,这是您遇到问题的地方。列在那里,但有一个必须处理的标题。让我们使用
获取内容
来获取文件数据并忽略第一行。然后我们可以将剩余的数据转换为CSV对象。对于每一行,我们可以附加一个值,该值包含ns源文件名。收集所有更新数据并在输出前加上“merged.csv”


Matt,这很好用,我修改了“merged.csv”$mergedData以满足我的需要,我需要解决的是如何获得-Name“Name”-Value$file.Name“要插入到输出的第一列中,现在它被添加到最后一列。”USER17703更难当你不知道前面的道具时,我甚至会考虑为此提出一个新问题。(找不到)。
$path = "d:\temp"
$mergedData = Get-ChildItem $path -Filter "*.csv" | ForEach-Object{
    $file = $_
    # Get the file data
    Get-Content $file.FullName | 
        # Skip the filename
        Select-Object -Skip 1 |
        # Now we can get CSV object in the same way that Import-CSV would generate 
        ConvertFrom-Csv | ForEach-Object{
            # Add the current filename as a column
            $_ | Add-Member -MemberType NoteProperty -Name "Name" -Value $file.Name -PassThru
        }
# Convert back into raw, quoted data
} | ConvertTo-Csv -NoTypeInformation

# Prefix the header before the compiled data
"merged.csv",$mergedData | Set-Content "$path\merged.csv"