我有大约30个带有.log文件的目录。我想进入每个文件夹并分别合并子目录中所有文件的文本。我不想在所有子目录中组合所有文件的文本。
实施例
我有一个名为Machines
的目录在Machines\
我有
Machine2\
Machine3\
Machine4\
在每个Machine*
文件夹中,我有:
1.log
2.log
3.log
etc..
我想创建一个脚本:
首先:进入目录Machine2
并合并该目录中所有文本文件的文本
第二步:进入Machine3
目录并合并该目录中所有文本文件的文本。
如果只有一个文件夹,我可以使用下面的文件,但我需要它来遍历几个子文件夹,所以我不必在下面的命令中输入子目录。
Get-ChildItem -path "W:\Machines\Machine2" -recurse |?{ ! $_.PSIsContainer } |?{($_.name).contains(".log")} | %{ Out-File -filepath c:\machine1.txt -inputobject (get-content $_.fullname) -Append}
答案 0 :(得分:2)
我认为递归解决方案效果很好。给定一个目录,获取所有*.log
个文件的内容并转储到COMBINED.txt
。然后拉出所有子目录的名称,并为每个子目录重复。
function CombineLogs
{
param([string] $startingDir)
dir $startingDir -Filter *.log | Get-Content | Out-File (Join-Path $startingDir COMBINED.txt)
dir $startingDir |?{ $_.PsIsContainer } |%{ CombineLogs $_.FullName }
}
CombineLogs 'c:\logs'