我们可以使用 PowerShell 脚本来计算 Windows 系统中特定文件夹的大小(递归,包括所有子文件夹)。这样,您就可以快速找出磁盘上目录的大小,而无需使用 TreeSize 或 WinDirStat 等第三方工具。

此外,PowerShell 能够更灵活地筛选或排除计算文件夹大小时需要考虑的文件(按类型、大小或日期)。

使用以下 PowerShell cmdlet 计算文件夹的大小:

  • Get-ChildItem (别名) — 获取目录(包括嵌套子文件夹)中的文件列表(具有大小)。
  • Measure-Object(别名)——对所有文件的大小求和以获得总目录大小。

例如,要查找 E:\VMware 目录的大小(以 GB 为单位),请运行:

(Get-ChildItem E:\VMware -force -Recurse -ErrorAction SilentlyContinue| measure Length -sum).sum / 1Gb

使用的参数:

  • -Force:包括隐藏文件和系统文件
  • -Recure:获取子文件夹中的文件列表
  • -ErrorAction SilentlyContinue:忽略当前用户不允许访问的文件和文件夹
  • -measure Length -sum:所有文件大小的总和(Length 属性)
  • .sum/ 1Gb:显示总大小(以 GB 为单位)

在此示例中,目录大小约为 126 GB(如果启用了此 PowerShell 命令,则忽略 NTFS 文件系统压缩)。

如果要将结果四舍五入到小数点后两位,请使用以下命令:

"{0:N2} GB" -f ((Get-ChildItem E:\VMware -force -Recurse -ErrorAction SilentlyContinue| measure Length -sum).sum / 1Gb)

PowerShell 可以查找目录中特定类型的所有文件的总大小。例如,添加 *.rar 参数以找出 ISO 文件占用了多少空间:

"{0:N2} GB" -f ((Get-ChildItem E:\VMware *.rar -force -Recurse -ErrorAction SilentlyContinue| measure Length -sum).sum / 1Gb)

我们还可以使用其他过滤器来选择要包含在目录大小计算中的文件。例如,要查看 2025年1月至6月 创建的目录中的文件大小,使用以下命令:

(gci -force E:\VMware –Recurse -ErrorAction SilentlyContinue | ? {$_.CreationTime -gt '1/1/25’ -AND $_.CreationTime -lt '6/30/25'}| measure Length -sum).sum / 1Gb

获取目标文件夹中所有顶级子文件夹的大小以及每个子文件夹中的文件数 (在此示例中,PowerShell 脚本显示 中所有用户配置文件的大小):E:\VMware

$targetfolder='E:\VMware'
$dataColl = @()
gci -force $targetfolder -ErrorAction SilentlyContinue | ? { $_ -is [io.directoryinfo] } | % {
    $len = 0
    gci -recurse -force $_.fullname -ErrorAction SilentlyContinue | % { $len += $_.length }
    $filesCount = (gci -recurse -force $_.fullname -File -ErrorAction SilentlyContinue | Measure-Object).Count
  $dataObject = New-Object PSObject -Property @{
        Folder = $_.fullname
        SizeGb = ('{0:N3}' -f ($len / 1Gb)) -as [single]
        filesCount=$filesCount
    }
   $dataColl += $dataObject
   }
$dataColl | Out-GridView -Title "Subfolder sizes and number of files"

该脚本将显示 Out-GridView 图形表,其中列出了目录、目录大小以及它们包含的文件数。表中的文件夹可以按 Out-GridView 窗体中的文件大小或数量进行排序。

我们还可以将上面的结果导出到 CSV 文件:

$targetfolder='E:\VMware'
$dataColl = @()
gci -force $targetfolder -ErrorAction SilentlyContinue | ? { $_ -is [io.directoryinfo] } | % {
    $len = 0
    gci -recurse -force $_.fullname -ErrorAction SilentlyContinue | % { $len += $_.length }
    $filesCount = (gci -recurse -force $_.fullname -File -ErrorAction SilentlyContinue | Measure-Object).Count
    $dataObject = New-Object PSObject -Property @{
        Folder = $_.fullname
        SizeGb = ('{0:N3}' -f ($len / 1Gb)) -as [single]
        filesCount=$filesCount
    }
    $dataColl += $dataObject
}

# 显示在Out-GridView中
$dataColl | Out-GridView -Title "子文件夹大小和文件数量"

# 导出到CSV文件
$csvPath = Join-Path -Path $targetfolder -ChildPath "FolderSizes_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv"
$dataColl | Export-Csv -Path $csvPath -NoTypeInformation -Encoding UTF8
Write-Host "结果已导出到: $csvPath"

保持原有的 Out-GridView 显示功能,并将结果导出到 E:\VMware 目录下的 CSV 文件,CSV 文件名包含时间戳(例如:FolderSizes_20250824_224730.csv)。

作者:十一张  创建时间:2025-08-24 22:20
最后编辑:十一张  更新时间:2025-09-22 22:14