循环遍历子文件夹并合并文本文件 - 将组合文件输出到文件夹

时间:2016-03-24 19:04:08

标签: file loops powershell text

我有一个子文件夹目录。每个包含其中的文本文件。我正在尝试合并每个子文件夹中找到的文件。

示例:

SubFolder 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文件夹。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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
}