我在这段代码中遇到问题,无法找到目录中的文件夹,列表中有大小,但我一直遇到错误
$Directory = Read-Host "Enter your directory"
$colItems = (Get-ChildItem $Directory | {$_.Attributes -match 'Directory'} |Measure-Object -Property Length -Sum )
在|之后添加位显示我开始收到错误的尺寸。
答案 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}
此属性也可用于其他提供商(注册表,证书存储区等)。