当前位置: 首页 > news >正文

统计C盘各种扩展名文件大小总和及数量的PowerShell脚本

本脚本只统计了一半文件的大小数量,其它部分系统文件无访问权限。需要在 TrustedInstaller 权限下运行才能访问。如何获取 TrustedInstaller 权限。
 

# 统计C盘各种扩展名文件大小总和及数量的PowerShell脚本
$extSizes = @{}
$totalFiles = 0
$stopwatch = [System.Diagnostics.Stopwatch]::StartNew()# 扫描文件并统计
Get-ChildItem -Path 'C:\' -File -Recurse -ErrorAction SilentlyContinue | ForEach-Object {$totalFiles++# 每处理5000个文件显示进度if ($totalFiles % 5000 -eq 0) {$elapsed = $stopwatch.Elapsed.ToString("mm\:ss")Write-Progress -Activity "扫描文件 (已处理 $totalFiles 个)" `-Status "当前: $([System.IO.Path]::GetFileName($_.FullName))" `-PercentComplete (($totalFiles % 100000)/1000)}$ext = $_.Extension.ToLower()if (-not $ext) { $ext = '_no_extension_' }if (-not $extSizes.ContainsKey($ext)) {$extSizes[$ext] = @{TotalSize = 0LCount = 0}}$extSizes[$ext].TotalSize += $_.Length$extSizes[$ext].Count++
}# 转换大小格式的函数
function Format-FileSize {param([long]$size)switch ($size) {{ $_ -ge 1TB } { return [math]::Round($_ / 1TB, 1).ToString('0.#') + "T" }{ $_ -ge 1GB } { return [math]::Round($_ / 1GB, 1).ToString('0.#') + "G" }{ $_ -ge 1MB } { return [math]::Round($_ / 1MB, 1).ToString('0.#') + "M" }{ $_ -ge 1KB } { return [math]::Round($_ / 1KB, 1).ToString('0.#') + "K" }default { return "$_ B" }}
}# 格式化数量显示(添加千位分隔符)
function Format-Count {param([int]$count)return $count.ToString("N0")
}# 准备结果数据
$results = @()
foreach ($ext in $extSizes.Keys) {$results += [PSCustomObject]@{Extension = $extSize      = Format-FileSize -size $extSizes[$ext].TotalSizeCount     = Format-Count -count $extSizes[$ext].CountTotalBytes= $extSizes[$ext].TotalSize}
}# 计算总扫描时间
$scanTime = $stopwatch.Elapsed.ToString("hh\:mm\:ss")# 输出结果表格(按总大小降序)
$sortedResults = $results | Sort-Object TotalBytes -Descending# 显示统计摘要
Clear-Host
Write-Host "`n文件扩展名统计报告 (C:\)" -ForegroundColor Cyan
Write-Host "扫描文件总数: $($totalFiles.ToString('N0'))" -ForegroundColor Yellow
Write-Host "扫描耗时: $scanTime" -ForegroundColor Yellow
Write-Host "发现扩展名类型: $($extSizes.Count)`n" -ForegroundColor Yellow# 格式化表格输出
$sortedResults | Format-Table @(@{Label="扩展名"; Expression={$_.Extension}; Width=12; Alignment="Left"}@{Label="大小"; Expression={$_.Size}; Width=10; Alignment="Right"}@{Label="数量"; Expression={$_.Count}; Width=15; Alignment="Right"}
) -AutoSize# 保存结果到CSV(修复数字扩展名问题)
$timestamp = Get-Date -Format "yyyyMMdd-HHmmss"
$csvPath = Join-Path -Path $env:TEMP -ChildPath "FileSizeSummary_$timestamp.csv"# 创建CSV内容(修复数字扩展名问题)
$csvData = $sortedResults | ForEach-Object {# 在数字扩展名前添加单引号防止Excel转换$fixedExtension = if ($_.Extension -match '^\.\d+$') {"'" + $_.Extension} else {$_.Extension}[PSCustomObject]@{Extension = $fixedExtensionSize      = $_.SizeCount     = $_.Count}
}$csvData | Export-Csv -Path $csvPath -NoTypeInformation -Encoding UTF8
Write-Host "`n结果已保存到: $csvPath" -ForegroundColor Green# 额外提示Excel处理建议
Write-Host "`n注意: 数字扩展名(如 .1, .2)在CSV中已添加前缀单引号'" -ForegroundColor Magenta
Write-Host "在Excel中打开时请检查扩展名格式是否正确,若仍不正确请手动设置格式:" -ForegroundColor Magenta
Write-Host "1. 全选扩展名列" -ForegroundColor Yellow
Write-Host "2. 右键选择'设置单元格格式'" -ForegroundColor Yellow
Write-Host "3. 选择'文本'格式" -ForegroundColor YellowRead-Host "按 Enter 退出"

# 统计C盘各种扩展名文件大小总和及数量的PowerShell脚本
$extSizes = @{}
$totalFiles = 0
$stopwatch = [System.Diagnostics.Stopwatch]::StartNew()

# 扫描文件并统计
Get-ChildItem -Path 'C:\' -File -Recurse -ErrorAction SilentlyContinue | ForEach-Object {
    $totalFiles++
    # 每处理5000个文件显示进度
    if ($totalFiles % 5000 -eq 0) {
        $elapsed = $stopwatch.Elapsed.ToString("mm\:ss")
        Write-Progress -Activity "扫描文件 (已处理 $totalFiles 个)" `
                       -Status "当前: $([System.IO.Path]::GetFileName($_.FullName))" `
                       -PercentComplete (($totalFiles % 100000)/1000)
    }
    
    $ext = $_.Extension.ToLower()
    if (-not $ext) { $ext = '_no_extension_' }
    
    if (-not $extSizes.ContainsKey($ext)) {
        $extSizes[$ext] = @{
            TotalSize = 0L
            Count = 0
        }
    }
    $extSizes[$ext].TotalSize += $_.Length
    $extSizes[$ext].Count++
}

# 转换大小格式的函数
function Format-FileSize {
    param([long]$size)
    switch ($size) {
        { $_ -ge 1TB } { return [math]::Round($_ / 1TB, 1).ToString('0.#') + "T" }
        { $_ -ge 1GB } { return [math]::Round($_ / 1GB, 1).ToString('0.#') + "G" }
        { $_ -ge 1MB } { return [math]::Round($_ / 1MB, 1).ToString('0.#') + "M" }
        { $_ -ge 1KB } { return [math]::Round($_ / 1KB, 1).ToString('0.#') + "K" }
        default { return "$_ B" }
    }
}

# 格式化数量显示(添加千位分隔符)
function Format-Count {
    param([int]$count)
    return $count.ToString("N0")
}

# 准备结果数据
$results = @()
foreach ($ext in $extSizes.Keys) {
    $results += [PSCustomObject]@{
        Extension = $ext
        Size      = Format-FileSize -size $extSizes[$ext].TotalSize
        Count     = Format-Count -count $extSizes[$ext].Count
        TotalBytes= $extSizes[$ext].TotalSize
    }
}

# 计算总扫描时间
$scanTime = $stopwatch.Elapsed.ToString("hh\:mm\:ss")

# 输出结果表格(按总大小降序)
$sortedResults = $results | Sort-Object TotalBytes -Descending

# 显示统计摘要
Clear-Host
Write-Host "`n文件扩展名统计报告 (C:\)" -ForegroundColor Cyan
Write-Host "扫描文件总数: $($totalFiles.ToString('N0'))" -ForegroundColor Yellow
Write-Host "扫描耗时: $scanTime" -ForegroundColor Yellow
Write-Host "发现扩展名类型: $($extSizes.Count)`n" -ForegroundColor Yellow

# 格式化表格输出
$sortedResults | Format-Table @(
    @{Label="扩展名"; Expression={$_.Extension}; Width=12; Alignment="Left"}
    @{Label="大小"; Expression={$_.Size}; Width=10; Alignment="Right"}
    @{Label="数量"; Expression={$_.Count}; Width=15; Alignment="Right"}
) -AutoSize

# 保存结果到CSV(修复数字扩展名问题)
$timestamp = Get-Date -Format "yyyyMMdd-HHmmss"
$csvPath = Join-Path -Path $env:TEMP -ChildPath "FileSizeSummary_$timestamp.csv"

# 创建CSV内容(修复数字扩展名问题)
$csvData = $sortedResults | ForEach-Object {
    # 在数字扩展名前添加单引号防止Excel转换
    $fixedExtension = if ($_.Extension -match '^\.\d+$') {
        "'" + $_.Extension
    } else {
        $_.Extension
    }
    
    [PSCustomObject]@{
        Extension = $fixedExtension
        Size      = $_.Size
        Count     = $_.Count
    }
}

$csvData | Export-Csv -Path $csvPath -NoTypeInformation -Encoding UTF8
Write-Host "`n结果已保存到: $csvPath" -ForegroundColor Green

# 额外提示Excel处理建议
Write-Host "`n注意: 数字扩展名(如 .1, .2)在CSV中已添加前缀单引号'" -ForegroundColor Magenta
Write-Host "在Excel中打开时请检查扩展名格式是否正确,若仍不正确请手动设置格式:" -ForegroundColor Magenta
Write-Host "1. 全选扩展名列" -ForegroundColor Yellow
Write-Host "2. 右键选择'设置单元格格式'" -ForegroundColor Yellow
Write-Host "3. 选择'文本'格式" -ForegroundColor Yellow

Read-Host "按 Enter 退出"


完全白嫖 DeepSeek! 拿去不谢!

相关文章:

  • 集成测试 maestro-我的第一个flow以及第一次云端测试
  • 【递归、搜索与回溯算法】综合练习(二)
  • 免费高清多功能录屏软件推荐
  • Bootstrap:精通级教程(VIP10万字版)
  • (24)多租户 SaaS 平台设计
  • Microsoft.Extensions.AI 技术深度解析与实践指南
  • 特伦斯 S75:重塑钢琴体验的数码钢琴之选
  • 如何选择合适的培养基过滤器
  • Java大师成长计划之第35天:未来展望与个人总结
  • EDW2025|数据治理的神话破除——从误区到现实
  • 页面表格、模型、脚本这三者之间的数据是如何传输的?尤其是模型(Model)到底是怎样的运作原理与数据流转?
  • 2505软考高项第一、二批真题终极汇总
  • 彻底解决Win11文件资源管理器预览窗格无法预览问题
  • UHF RFID无源标签的芯片供电原理
  • File—IO流
  • mysql-mysql源码本地调试
  • 基于element-UI 实现下拉框滚动翻页查询通用组件
  • 查看·电脑安装·的 .NET 版本
  • Numpy 数组操作:高效的数据处理利器
  • STUSB4500 PPS(PD3.0)快充SINK模块——应用 解析
  • 外贸自建站平台价格/百度服务电话在线人工
  • 做网站用python还是java/2023适合小学生的新闻事件
  • 淘宝联盟如何建设个人网站/广州头条新闻最新
  • 黄冈网站官方登录平台/色盲图
  • 图跃网站建设/推广引流网站
  • 可以做短信炸弹的网站/营销型公司网站建设