2016-03-24 92 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.txt也不xyzCOMBINED.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,這是粉碎! :) - 它精美地組合了文本文件。我將只有一個級別的文件夾,以保持簡單。如果我可能要求您的專業知識的一個巨大的利益 - 如果我想結合docx文件 - 是更先進的 - 我會怎麼做呢?非常感謝 – wp44

+0

谷歌類似'powershell合併docx文件'。它也擴展了原有的話題。 @ wp44如果我的回答很有幫助,請考慮將其標記爲已接受。 [見本頁](http://meta.stackexchange.com/questions/5234/)解釋爲什麼這很重要。 – JosefZ

1

遞歸可能會非常棘手,如果你不知道如何處理它。在這種情況下,無論如何你都不需要自己實現遞歸。讓PowerShell爲你做重擔:

$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

相關問題