2016-03-24 4 views
0

Ich habe ein Verzeichnis von Unterordnern. Jeder enthält Textdateien darin. Ich versuche, die Dateien in jedem Unterordner zu kombinieren.Schleife durch Unterordner und Kombinieren Textdateien innerhalb - Ausgabe einer kombinierten Datei zu einem Ordner

Beispiel:

SubFolder 1 → a.txt + b.txt + c.txt → SubFolder1Merged.txt
SubFolder 2 → x.txt + y.txt + z.txt → SubFolder2Merged.txt

Ich habe referenziert this thread.

Dies ist, was ich bisher:

$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 

Ich bekomme eine combined.txt in CombinedTextFiles erzeugt - aber nicht einzelne Dateien verschmolzen. Auch die Datei ist leer.

Ich möchte einfach jeden Unterordner durchlaufen, die Textdateien in jedem Ordner zusammenführen und dann in meinen CombinedTextfiles-Ordner ausgeben.

Antwort

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" 

Above Codeausschnitt würde lösen TextFilesCOMBINED.txt und NewCOMBINED.txt jedoch nicht ABCCOMBINED.txt noch xyzCOMBINED.txt in nächstem Szenario lösen:

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

Hallo JosefZ, das ist überwältigend! :) - es kombiniert die Textdateien brilliant. Ich werde nur 1 Level-Ordner haben, um die Dinge einfach zu halten. Wenn ich nach einem großen Gefallen für Ihr Fachwissen fragen könnte - wenn ich docx-Dateien kombinieren wollte - ist das fortgeschrittener - wie würde ich darüber gehen? Vielen Dank – wp44

+0

Google für etwas wie 'Powershell Merge docx Dateien'. Es erweitert das ursprüngliche Thema auch sehr. @ wp44 Wenn meine Antwort hilfreich war, dann erwäge bitte, sie als akzeptiert zu markieren. [Siehe diese Seite] (http://meta.stackexchange.com/questions/5234/) für eine Erklärung, warum dies wichtig ist. – JosefZ

1

Rekursion kann schwierig sein, wenn Sie nicht wissen, wie sie damit umgehen. Und in diesem Fall müssen Sie die Rekursion nicht selbst implementieren. Lassen Sie PowerShell das schwere Heben für Sie erledigen:

$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

Danke Ansgar - Das ist Brilliant :) Ich habe keine andere Antwort erwartet. In Zukunft - ich werde warten - danke an beide Herren, die geholfen haben, dies zu lösen. – wp44

Verwandte Themen