在新列中将文件名附加到 CSV

jaf*_*eth 1 csv powershell

我有很多 csv 文件存储在一个目录中。在每个csv文件中需要通过powershell添加名称作为列。

例子

文件位置: <SERVERNAME>\Export\FILENAME1.CSV

内容:

1232;Description;a1
1232;Description;a2
Run Code Online (Sandbox Code Playgroud)

结果必须是:

1232;Description;a1;FILENAME1.CSV
1232;Description;a2;FILENAME1.CSV
Run Code Online (Sandbox Code Playgroud)

有人可以帮我弄这个吗?

Mar*_*agg 5

以下将向目录中的每个 .CSV 文件附加一个 Filename 列:

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 ";"
}
Run Code Online (Sandbox Code Playgroud)

解释:

  • 用于Get-ChildItem获取所有名为 *.csv 的文件
  • 遍历每个文件ForEach-Object并使用Import-CSVPowerShell 对象加载它们的内容
  • 将文件名记录在 $FileName
  • 用于Select-Object添加具有变量名称Filename和值的计算属性$FileName
  • 用于Export-CSV写回原始文件。的-NTI(NoTypeInformation)开关被用来确保PowerShell的对象首标线不包括在内。