列出目录子目录和大小

时间:2014-04-14 03:11:06

标签: powershell

我在这段代码中遇到问题,无法找到目录中的文件夹,列表中有大小,但我一直遇到错误

$Directory = Read-Host "Enter your directory"

$colItems = (Get-ChildItem $Directory |  {$_.Attributes -match 'Directory'} |Measure-Object -Property Length -Sum  )

在|之后添加位显示我开始收到错误的尺寸。

3 个答案:

答案 0 :(得分:1)

目录对象(类型为DirectoryInfo的对象)没有长度属性,这就是您收到错误的原因。为了获得powershell中目录所占用的空间,您必须递归搜索所有子目录并累加它们包含的所有文件的长度。幸运的是,有几个来源可以告诉你如何做到这一点。这是one.

答案 1 :(得分:1)

为简单起见,您可以使用 Scripting.FileSystemObject COM对象。

$Directory = Read-Host "Enter your directory"

$fso = New-Object -ComObject Scripting.FileSystemObject

Get-ChildItem -Path $Directory | ? { $_.PSIsContainer } | % { $fso.GetFolder($_.FullName).size/1kb }

答案 2 :(得分:0)

试试这个

$Folders = Get-ChildItem $Directory | Where-Object {$_.Attributes -eq 'Directory'}
foreach ($Folder in $Folders)
    {
        $FolderSize = Get-ChildItem $Folder.Fullname -recurse | Measure-Object -property length -sum
        $Folder.FullName + " -- " + "{0:N2}" -f ($FolderSize.sum / 1MB) + " MB"
    }

-Recurse参数确保除了获取System.IO.DirectoryInfo之外,您还获得了包含Length属性的System.IO.FileInfo个对象。

我还建议改为使用

$Folders = Get-ChildItem $Directory | Where-Object {$_.Attributes -eq 'Directory'}

您可以使用:

$Folders = Get-ChildItem $Directory | Where-Object {$_.PSIsContainer -eq $True}

此属性也可用于其他提供商(注册表,证书存储区等)。