我有一个子文件夹目录。每个包含其中的文本文件。我正在尝试合并每个子文件夹中找到的文件。
示例:
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文件夹。
答案 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.txt
和NewCOMBINED.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
答案 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
}