我需要递归的获取一个目录的大小。我每个月都要这样做,所以我想制作一个
PowerShell脚本来做到这一点。
我该怎么做?
尝试以下
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,并对值进行求和。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。