2016-03-24 51 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

相关问题