使用PowerShell合并多个CSV文件

时间:2015-04-13 16:45:06

标签: powershell csv powershell-v4.0

我一直在尝试使用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

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

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

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

1 个答案:

答案 0 :(得分:0)

我觉得你至少有两个可能的问题之一。 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

这是非常原油并将重复列。这是你可能想要的。如果我们走错了路,请更新您的问题。