我一直在尝试使用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,所以不确定是否做错了什么。我已经创建/运行了更多没有问题的脚本。

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

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

最佳答案

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

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

关于powershell - 使用Powershell合并多个CSV文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29610665/

10-16 16:06
查看更多