我想查看文件夹中子文件夹的大小,类似于 Linuxdu -sh
命令。如何在命令提示符中列出目录及其大小?
答案1
尝试磁盘使用情况Sysinternals 的实用程序。具体来说,du -l 1
应该显示当前目录的每个子目录的大小。有关更多信息,du
请不带任何参数运行。
如果 PowerShell 可以,请尝试以下操作:
Get-ChildItem |
Where-Object { $_.PSIsContainer } |
ForEach-Object {
$_.Name + ": " + (
Get-ChildItem $_ -Recurse |
Measure-Object Length -Sum -ErrorAction SilentlyContinue
).Sum
}
大小以字节为单位。要以更大的单位(如 MB)格式化它们,请尝试以下命令(精简为一行):
Get-ChildItem | Where-Object { $_.PSIsContainer } | ForEach-Object { $_.Name + ": " + "{0:N2}" -f ((Get-ChildItem $_ -Recurse | Measure-Object Length -Sum -ErrorAction SilentlyContinue).Sum / 1MB) + " MB" }
有关详细信息,请参阅For more information, seeTechnet 上的这篇文章。
如果你想要更灵活的尺寸格式(根据实际大小选择 kB/MB/GB/等),请参阅这个问题及其答案。
我认为不可能通过常规命令行和几个简单的命令来完成您想要的操作。请参阅此脚本作为示例(不会在这里复制它,因为我不认为这种方法值得追求,除非 PowerShell 不可用且第三方实用程序不可接受)。
答案2
我没有使用du
Linux 的经验。但在 Windows 中,我使用dir /s
它来列出所有文件夹和子文件夹以及文件大小。
答案3
这是对Indrek 的回答。我添加了以下内容:
- 使其在子目录中进一步递归
- 增加了大小阈值以忽略较小的目录
- 将目录名称替换为当前目录的相对路径
- 按路径对结果进行排序(我发现这比按大小排序更方便,因为它们已经按大小过滤了)
- 添加了一些格式以使结果更具可读性
因此,设置$minsizeMB
所需$maxdepth
的值并运行脚本。
$minsizeMB = 100;
$maxdepth = 5;
Get-ChildItem -depth $maxdepth -Recurse |
Where-Object { $_.PSIsContainer } |
Select-Object FullName |
Sort-Object FullName |
ForEach-Object {
$directory = Get-Item $_.FullName;
$path = Resolve-Path -Relative $directory.FullName ;
$size = ((Get-ChildItem $directory -Recurse | Measure-Object Length -Sum -ErrorAction SilentlyContinue).Sum / 1MB) ;
if ($size -ge $minsizeMB) { "{0,-90}: {1:N2} MB" -f ($path, $size) }
}