【问题标题】:Merging multiple CSV files using powershell使用 powershell 合并多个 CSV 文件
【发布时间】:2015-06-19 01:53:19
【问题描述】:

我一直在尝试使用 PowerShell 将几个 CSV 文件合并到一个文件中。我已经用批处理文件做了很多次,没有问题,但我无法使用 PowerShell 来完成。

这是我正在使用的代码:

Get-ChildItem C:\Users\kz280\Desktop\Script_Development\Test_Logs\*.csv |
ForEach-Object {Import-Csv $_} | 
Export-Csv -NoTypeInformation C:\Users\kz280\Desktop\Script_Development\Test_Logs\MergedCsvFiles.csv

我还尝试了 4 或 5 个在 Stack Overflow 中找到的类似/经过验证的代码,但均未成功。我刚开始玩 PowerShell,所以我不确定我是否做错了什么。我已经创建/运行了几个没有问题的脚本。

我得到的错误是脚本无限期地运行。除此之外,它只合并三列。其余 50 列未显示在最终的 CSV 文件中。

如何将所有源文件合并到一个文件中?

【问题讨论】:

  • 将您的新 CSV 导出到其他目录。否则get-childitem | foreach-object 将继续处理它。
  • 如果文件不是确切的列类型名称和计数,那么第一个文件将控制其余文件的外观。 Get-Content 可以帮助 Select -skip 1 取决于您是否需要标题。
  • 很好 - 感谢您的帮助。

标签: powershell csv powershell-4.0


【解决方案1】:

我觉得您至少有两个可能的问题之一。 Bill_Stewart 所说的关于您的输出文件也被用作输入的说法是正确的。您需要在第一个 Get-ChildItem 之后断开管道或选择不同的输出目录。

$files = Get-ChildItem C:\Users\kz280\Desktop\Script_Development\Test_Logs\*.csv 
$files | ForEach-Object {Import-Csv $_} | 
    Export-Csv -NoTypeInformation C:\Users\kz280\Desktop\Script_Development\Test_Logs\MergedCsvFiles.csv

这样输出文件不会作为输入文件处理。

我觉得您尝试合并的文件的结构不完全相同。因此,如果是这种情况,我提供了一种合并文件的简单方法

$files = Get-ChildItem C:\Users\kz280\Desktop\Script_Development\Test_Logs\*.csv 
Get-Content $files | Set-Content C:\Users\kz280\Desktop\Script_Development\Test_Logs\MergedCsvFiles.csv

这是非常粗略的,会重复列。不过,这可能是您想要的。如果我们走错了路,请用更多详细信息更新您的问题。

【讨论】:

    猜你喜欢
    • 2015-03-09
    • 1970-01-01
    • 2015-05-23
    • 2013-01-11
    • 1970-01-01
    • 2021-12-13
    • 2013-08-02
    • 2013-02-11
    • 2011-04-06
    相关资源
    最近更新 更多