合并文件夹中多个文件的内容

时间:2012-09-11 16:31:39

标签: powershell

我有大约30个带有.log文件的目录。我想进入每个文件夹并分别合并子目录中所有文件的文本。我不想在所有子目录中组合所有文件的文本。

实施例

我有一个名为Machines

的目录

Machines\我有

Machine2\
Machine3\
Machine4\

在每个Machine*文件夹中,我有:

1.log
2.log
3.log
etc..

我想创建一个脚本:

首先:进入目录Machine2并合并该目录中所有文本文件的文本 第二步:进入Machine3目录并合并该目录中所有文本文件的文本。

如果只有一个文件夹,我可以使用下面的文件,但我需要它来遍历几个子文件夹,所以我不必在下面的命令中输入子目录。

Get-ChildItem -path "W:\Machines\Machine2" -recurse |?{ ! $_.PSIsContainer } |?{($_.name).contains(".log")} | %{ Out-File -filepath c:\machine1.txt -inputobject (get-content $_.fullname) -Append}

1 个答案:

答案 0 :(得分:2)

我认为递归解决方案效果很好。给定一个目录,获取所有*.log个文件的内容并转储到COMBINED.txt。然后拉出所有子目录的名称,并为每个子目录重复。

function CombineLogs
{
   param([string] $startingDir)

   dir $startingDir -Filter *.log | Get-Content | Out-File (Join-Path $startingDir COMBINED.txt)

   dir $startingDir |?{ $_.PsIsContainer } |%{ CombineLogs $_.FullName }
}

CombineLogs 'c:\logs'