3

我有大约 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}
4

1 回答 1

3

我认为递归解决方案会很好。给定一个目录,获取所有*.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'
于 2012-09-11T17:05:54.633 回答