【问题标题】:How to join multiple files in two directories in powershell?如何在powershell的两个目录中加入多个文件?
【发布时间】:2015-01-28 01:21:22
【问题描述】:

我有 2 个文件夹 OldData 和 NewData。在这两个文件夹中,我都有数千个同名的 csv 文件。寻找一种最有效的方法来合并两个文件夹中的同名文件并将它们存储在 NewData 文件夹中。

例子:

OldData folder:
test1.csv
test2.csv
.
.

NewData 文件夹:

test1.csv (same names than in OldData folders but not exactly the same content)
test2.csv
.
.

在 NewData 文件夹中应该有来自两个文件夹的合并文件。 OldData 文件夹中的文件有标题。新数据文件夹中的文件没有标题,但它们具有相同的结构(相同的列数)。

感谢您的帮助。

【问题讨论】:

  • csv 文件是否有标题行?
  • OldData 文件夹中的文件有标题。新数据文件夹中的文件没有标题,但它们具有相同的结构(相同的列数)。
  • 编辑了这个问题,因为这是非常重要的信息

标签: file powershell merge


【解决方案1】:

这样的事情应该可以工作:

Get-ChildItem 'C:\OldData\*.csv' | % {
  $dst = Join-Path 'C:\NewData' $_.Name
  Import-Csv $_.FullName | Export-Csv $dst -Append
}

编辑:如果 OldData 中的文件确实有标题,而 NewData 中的文件没有,我会将新文件附加到旧文件,而不是相反。

Get-ChildItem 'C:\NewData\*.csv' | % {
  $dst = Join-Path 'C:\OldData' $_.Name
  if (Test-Path -LiteralPath $dst) {
    Get-Content $_.FullName | Add-Content $dst
  }
}

【讨论】:

  • 感谢您的帮助,我已经尝试过您的代码,但它没有任何作用。没有错误,只是没有追加数据。
  • 尝试使用单个文件和显式路径的 Import-Csv | Export-Csv。这行得通还是你得到一个错误?两个文件是否以相同的顺序具有相同的列,并且它们是否包含标题行,正如 mjolinor 所问的那样?我的示例代码假定两者都适用。另外,您使用哪个 PowerShell 版本? Export-Csv 不支持版本 3 之前的 -Append
  • 它也不适用于单个文件。我使用的是版本 4。 OldData 文件夹中的文件有标题。新数据文件夹中的文件没有标题,但它们具有相同的结构(相同的列数)
  • 工作正常。只有一个问题。如果 OldData 文件夹中的文件不存在,我不想创建新文件。因此,如果在 NewData 文件夹中是名为 test10.csv 的文件,而在 OldData 中,文件 test10.csv 会丢失。我不想创建新文件。
  • 然后检查目标文件是否存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多