用于获取目录总大小的 PowerShell 脚本
我需要递归地获取目录的大小。 我每个月都必须执行此操作,因此我想制作一个 PowerShell 脚本来执行此操作。
我该怎么做?
I need to get the size of a directory, recursively. I have to do this every month so I want to make a PowerShell script to do it.
How can I do it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
尝试以下操作
这实际上会生成一些摘要对象,其中将包括项目计数。 不过,您可以只获取 Sum 属性,这将是长度的总和
编辑为什么这有效?
让我们按管道的组成部分来分解它。
gci -re $root
命令将从起始$root
目录递归获取所有项目,然后将它们推入管道。 因此,$root
下的每个文件和目录都将通过第二个表达式?{ -not $_.PSIsContainer }
。 传递给此表达式的每个文件/目录都可以通过变量$_
进行访问。 前面的? 指示这是一个过滤器表达式,意味着仅保留管道中满足此条件的值。 PSISContainer 方法将为目录返回 true。 因此,实际上过滤器表达式仅保留文件值。 最终的 cmdlet 测量对象将对管道中剩余的所有值的属性 Length 的值进行求和。 因此,它本质上是对当前目录下的所有文件调用 Fileinfo.Length (递归)并对值求和。Try the following
This actually produces a bit of a summary object which will include the Count of items. You can just grab the Sum property though and that will be the sum of the lengths
EDIT Why does this work?
Let's break it down by components of the pipeline. The
gci -re $root
command will get all items from the starting$root
directory recursively and then push them into the pipeline. So every single file and directory under the$root
will pass through the second expression?{ -not $_.PSIsContainer }
. Each file / directory when passed to this expression can be accessed through the variable$_
. The preceding ? indicates this is a filter expression meaning keep only values in the pipeline which meet this condition. The PSIsContainer method will return true for directories. So in effect the filter expression is only keeping files values. The final cmdlet measure-object will sum the value of the property Length on all values remaining in the pipeline. So it's essentially calling Fileinfo.Length for all files under the current directory (recursively) and summing the values.如果您有兴趣包含隐藏文件和系统文件的大小,那么您应该将 -force 参数与 Get-ChildItem 一起使用。
If you are interested in including the size of hidden and system files then you should use the -force parameter with Get-ChildItem.
以下是获取特定文件扩展名大小的快速方法:
Here's quick way to get size of specific file extensions:
感谢那些在这里发帖的人。 我采用了知识来创建这个:
Thanks to those who posted here. I adopted the knowledge to create this:
要完善@JaredPar的这个答案以进行扩展和提高性能:
或者,为了使其更方便使用,请探索类型数据:
然后通过
Get-ChildItem | 使用 选择-对象名称、长度、大小
To refine this answer by @JaredPar to be expanded and more performant:
Or, to make it more convenient for use explore type data:
Then use by
Get-ChildItem | Select-Object Name,Length,Size