在新列

时间:2017-07-04 07:02:38

标签: powershell csv

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

示例

档案位置:<SERVERNAME>\Export\FILENAME1.CSV

内容:

1232;Description;a1
1232;Description;a2

结果必须是:

1232;Description;a1;FILENAME1.CSV
1232;Description;a2;FILENAME1.CSV

有人可以帮我这个吗?

2 个答案:

答案 0 :(得分:2)

以下内容将Filename列附加到目录中的每个.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 ";"
}

<强>解释

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

答案 1 :(得分:0)

Mark Wragg的PowerShell代码可以工作,但是我不得不将定界符更改为,而不是;以便在Excel中打开。我试图找出如何将文件名附加到第一列而不是最后一列,因为我的文件没有相同数量的字段,因此它们无法对齐。