3

.log ファイルを含む約 30 のディレクトリがあります。各フォルダーに移動し、サブディレクトリ内のすべてのファイルのテキストを個別に結合したいと考えています。すべてのサブディレクトリ内のすべてのファイルのテキストを結合したくありません。

Machines というディレクトリがあります

Machines\私が持っている

Machine2\
Machine3\
Machine4\

Machine*フォルダー内には、次のものがあります。

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

次のようなスクリプトを作成したいと思います。

1 つ目: ディレクトリに移動し、Machine2そのディレクトリ内のすべてのテキスト ファイルのテキストを結合します。2 つ目: ディレクトリに移動し、そのMachine3ディレクトリ内のすべてのテキスト ファイルのテキストを結合します。

フォルダーが 1 つしかない場合は以下を使用できますが、いくつかのサブフォルダーをループする必要があるため、以下のコマンドでサブディレクトリを入力する必要はありません。

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

1 に答える 1

3

再帰的な解決策がうまくいくと思います。ディレクトリを指定して、すべての*.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'
于 2012-09-11T17:05:54.633 に答える