基于文件/文件夹名称的文件夹大小的总和

时间:2016-11-26 14:41:23

标签: powershell sum

我在包含数百/数千个数据库的多个SQL Server中有多个文件夹。每个数据库由三个元素组成:

<dbname>.MDF
<dbname>.LDF
<dbname>files (Folder that contains db files/attachments)

我需要将这些文件结合在一起并加上它们的总大小,是否有人对如何执行此操作有任何建议?

编辑:只是为了澄清,我现在能够输出MDF / LDF文件的文件大小,我有一个单独的脚本来总结文件夹大小。我需要一种在名称匹配时将.MDF / .LDF / DBFiles文件夹加在一起的方法。请记住,所有文件都以数据库名称为前缀。

编辑#2:到目前为止给出的2个选项将.mdf / .ldf文件加在一起没有问题,但是不要添加DBFiles文件夹的文件夹大小。有没有人有关于如何修改这些脚本以包含以相同名称开头的文件夹的任何输入。

首先提供的脚本:

$root = 'C:\db\folder'
Get-ChildItem "$root\*.mdf" | Select-Object -Expand BaseName |
ForEach-Object {
New-Object -Type PSObject -Property @{
  Database = $_
  Size     = Get-ChildItem "$root\$_*" -Recurse |
             Measure-Object Length -Sum |
             Select-Object -Expand Sum
}
}

第二个提供的脚本:

gci "c:\temp" -file -Include "*.mdf", "*.ldf" -Recurse | 
group BaseName, DirectoryName  | 
%{new-object psobject -Property @{FilesAndPath=$_.Name; Size=($_.Group | gci |  Measure-Object Length -Sum).Sum }    }

编辑#3:

感谢Ansgar(下文),更新后的解决方案完美地完成了这项工作。使用最终解决方案更新问题:

$root = 'C:\db\folder'
Get-ChildItem "$root\*.mdf" | Select-Object -Expand BaseName |
  ForEach-Object {
    New-Object -Type PSObject -Property @{
      Database = $_
      Size     = Get-ChildItem "$root\$_*\*" -Recurse |
                 Measure-Object Length -Sum |
                 Select-Object -Expand Sum
    }
  }

2 个答案:

答案 0 :(得分:0)

如果你想要dir和name文件(没有扩展名)的sise文件数据库的总和,试试吧

gci "c:\temp" -file -Include "*.mdf", "*.ldf" -Recurse | 
group BaseName, DirectoryName  | 
%{new-object psobject -Property @{FilesAndPath=$_.Name; Size=($_.Group | gci | Measure-Object Length -Sum).Sum }    }

如果需要,修改一下包含gci

答案 1 :(得分:0)

枚举数据库文件夹中的.mdf文件,然后枚举每个基本名称的文件和文件夹。

$root = 'C:\db\folder'
Get-ChildItem "$root\*.mdf" | Select-Object -Expand BaseName |
  ForEach-Object {
    New-Object -Type PSObject -Property @{
      Database = $_
      Size     = Get-ChildItem "$root\$_*\*" -Recurse |
                 Measure-Object Length -Sum |
                 Select-Object -Expand Sum
    }
  }