文件夹的Powershell文件夹大小没有列出Subdirectories

use*_*297 23 powershell

我找到了几个使用以下脚本来获取文件夹大小的资源

$colItems = (Get-ChildItem $startFolder -recurse | Where-Object {$_.PSIsContainer -eq $True} | Sort-Object)
foreach ($i in $colItems)
    {
        $subFolderItems = (Get-ChildItem $i.FullName | Measure-Object -property length -sum)
        $i.FullName + " -- " + "{0:N2}" -f ($subFolderItems.sum / 1MB) + " MB"
    }
Run Code Online (Sandbox Code Playgroud)

问题是它还列出了子目录,即:

c:\test\1 -- 10mb
c:\test\1\folder -- 10mb
c:\test\1\folder\deep -- 5mb
c:\test\1\folder\tuna -- 5mb
c:\test\2 -- 20bm
c:\test\2\folder -- 20mb
c:\test\2\folder\deep -- 10mb
c:\test\2\folder\tuna -- 10mb
Run Code Online (Sandbox Code Playgroud)

我想你知道我要去哪里.我要找的只是父文件夹的结果... SO:

c:\test\1 -- 10mb
c:\test\2 -- 20mb
Run Code Online (Sandbox Code Playgroud)

如何通过Powershell实现这一目标?....

Koh*_*brr 28

您需要递归地获取每个目录的总内容大小以输出.此外,您需要指定您要测量的内容不是目录,否则您会冒错误(因为目录没有Length参数).

这是为您正在寻找的输出修改的脚本:

$colItems = Get-ChildItem $startFolder | Where-Object {$_.PSIsContainer -eq $true} | Sort-Object
foreach ($i in $colItems)
{
    $subFolderItems = Get-ChildItem $i.FullName -recurse -force | Where-Object {$_.PSIsContainer -eq $false} | Measure-Object -property Length -sum | Select-Object Sum
    $i.FullName + " -- " + "{0:N2}" -f ($subFolderItems.sum / 1MB) + " MB"
}
Run Code Online (Sandbox Code Playgroud)


Lin*_*vel 11

这个简单的解决方案也适用于我.

powershell -c "Get-ChildItem -Recurse 'directory_path' | Measure-Object -Property Length -Sum"
Run Code Online (Sandbox Code Playgroud)


alf*_* s. 9

@Linga 发布的解决方案: "Get-ChildItem -Recurse 'directory_path' | Measure-Object -Property Length -Sum"很好而且简短。但是,它仅计算 的大小'directory_path',而不计算子目录。
这是列出所有子目录大小的简单解决方案。添加了一点漂亮的印刷。
(注意:使用该-File选项可以避免空子目录的错误)

foreach ($d in gci -Directory -Force) {
  '{0,15:N0}' -f ((gci $d -File -Recurse -Force | measure length -sum).sum) + "`t`t$d" 
}
Run Code Online (Sandbox Code Playgroud)