2016-03-24 4 views
0

私はサブフォルダのディレクトリを持っています。それぞれにはテキストファイルが含まれています。私は各サブフォルダにあるファイルを結合しようとしています。サブフォルダをループしてテキストファイルを結合出力ファイル内の結合ファイル

例:

サブフォルダ1 → A.TXT + B.TXT + c.txt → SubFolder1Merged.txt
サブフォルダ2 → X.TXT + Y.TXT + z.txt → SubFolder2Merged.txt

私はthis threadを参照しました。

これは私がこれまで持っているものです。

$startingDir = "C:\Users\WP\Desktop\TextFiles" 

function CombineLogs { 
    param([string]$startingDir) 

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

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

CombineLogs 'C:\Users\WP\Desktop\CombinedTextFiles' #output the combined text files here 

私はCombinedTextFilesで生成 combined.txtを取得する - ではなく、個々のファイルがマージされました。 また、ファイルが空です。

それぞれのサブフォルダをループし、各フォルダー内のテキストファイルをマージしてから、私のCombinedTextfilesフォルダーに出力します。コードスニペットの上

答えて

1
function CombineLogs 
{ 
    param([string] $startingDir) 

    $outputFile = (Split-Path $startingDir -Leaf) + "COMBINED.txt" 

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

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

$outputDir ='C:\Users\WP\Desktop\CombinedTextFiles' # output the combined text files here 
CombineLogs "C:\Users\WP\Desktop\TextFiles" 

TextFilesCOMBINED.txtNewCOMBINED.txtを解決するだろうが、次のシナリオでABCCOMBINED.txtxyzCOMBINED.txtを解決しない:

C:\Users\WP\Desktop\TextFiles\ABC\ABC 
C:\Users\WP\Desktop\TextFiles\ABC\xyz\ABC 
C:\Users\WP\Desktop\TextFiles\New 
C:\Users\WP\Desktop\TextFiles\xyz\ABC 
+0

こんにちはJosefZ、これは大変です! :) - それは鮮やかにテキストファイルを結合しました。私は物事を単純に保つために、1レベルのフォルダしか持たない。私があなたの専門知識の巨大な賛成を求めるかもしれない - 私がdocxファイルを結合したいと思えば - それはより高度です - 私はそれについていかに行くか。 – wp44

+0

Googleに 'powershell merge docx files'のようなものをありがとうございます。オリジナルの話題もずっと広がっています。 @ wp44私の答えが役に立ったら、それを受け入れたものとしてマークしてください。なぜこのことが重要であるかについては、[このページを見る](http://meta.stackexchange.com/questions/5234/)を参照してください。 – JosefZ

1

あなたがそれを処理する方法がわからない場合は再帰は注意が必要です。とにかく、あなたは自分で再帰を実装する必要はありません。

$startingDir = 'C:\Users\WP\Desktop\TextFiles' 
$combinedDir = 'C:\Users\WP\Desktop\CombinedTextFiles' 

Get-ChildItem $startingDir -Recurse | Where-Object { 
    $txtfiles = Join-Path $_.FullName '*.txt' 
    $_.PSIsContainer -and (Test-Path $txtfiles) 
} | ForEach-Object { 
    $merged = Join-Path $combinedDir ($_.Name + '_Merged.txt') 
    Get-Content $txtfiles | Set-Content $merged 
} 
+0

ありがとうございますAnsgar - これは華麗です:)私は別の答えを期待していませんでした。将来的には、私は待っています - これを解決するのを手伝った皆さんに感謝します。 – wp44

関連する問題