2012-09-11 138 views
2

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

我已经叫机

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} 

回答

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' 
相关问题