尝试以下
function Get-DirectorySize() { param ([string]$root = $(resolve-path .)) gci -re $root | ?{ -not $_.PSIsContainer } | measure-object -sum -property Length }
这实际上产生了一个摘要对象,其中将包括项数。你可以只是抓住Sum属性,而这将是长度的总和
$sum = (Get-DirectorySize "Some\File\Path").Sum
EDIT为什么这样工作?
我们来分解管道的组件。 gci -re $ root命令将从起始$根目录中递归获取所有项目,然后将其推入管道。那么$ root下的每个文件和目录都将通过第二个表达式?{-not $ _。PSIsContainer}。传递给此表达式的每个文件/目录可以通过变量$ _访问。前面的?表示这是一个过滤器表达式,仅保留符合此条件的管道中的值。 PSIsContainer方法将为目录返回true。因此,过滤器表达式只保留文件值。最终的cmdlet measure对象将对流水线中剩余的所有值的总和值进行总和。所以它本质上是为当前目录下的所有文件(递归)调用Fileinfo.Length,并对值进行求和。