2012-09-11 114 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' 
相關問題