dmz社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 317|回复: 1

PowerShell扫描文件夹大小

[复制链接]
  • TA的每日心情
    无聊
    5 天前
  • 签到天数: 341 天

    [LV.8]以坛为家I

    2

    主题

    504

    帖子

    2101

    积分

    一代宗师

    Rank: 7Rank: 7Rank: 7

    积分
    2101

    发表于 2024-8-8 12:06:15 | 显示全部楼层 |阅读模式

    本站资源全部免费,回复即可查看下载地址!

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    本帖最后由 LiuJiaCheng11 于 2024-8-8 12:20 编辑

    某天我发现我的E盘快满了,想清理一些大文件,但又不想去网上下载什么工具,就自己整个脚本去扫描了
    效果图1
    10
    效果图2
    有个无权限的文件夹,扫不了会报错(但似乎文件大小是正确的),报错信息会在进度条完成,输出结果后,再输出有错误的文件信息
    10
    代码
    [PowerShell] 纯文本查看 复制代码
    function Get-ResolvePath {
        param (
            [string]$Path
        )
        
        $ResolvePath = Resolve-Path -Path $Path
        return $ResolvePath
    }
    
    function Get-FolderSize {
        param (
            [Parameter(Mandatory = $true, Position = 0)]
            [ValidateNotNullOrEmpty()]
            [string]$FolderPath
        )
    
        $FolderPath = Get-ResolvePath $FolderPath
        if (Test-Path -Path $FolderPath -PathType Leaf) {
            # 如果路径是文件,则直接返回文件大小
            $file = Get-Item -Path $FolderPath -Force
            return $file.Length
        }
    
        $folderSize = 0
        try {
            Get-ChildItem -Recurse -File -Path $FolderPath -Force -ErrorAction Stop | ForEach-Object {
                try {
                    $folderSize += $_.Length
                } catch {
                    $global:errors += "处理文件时出错: $($_.FullName) - 错误信息: $($_.Exception.Message)"
                }
            }
        } catch {
            $global:errors += "解析目录时出错: $FolderPath - 错误信息: $($_.Exception.Message)"
        }
        
        return $folderSize
    }
    
    do {
        # 初始化错误数组
        $global:errors = @()
    
        # 读取用户输入的文件夹路径
        $folderPath = Read-Host "请输入文件夹路径(空表示当前路径)"
        if ($folderPath -eq ""){
            $folderPath = $PWD.Path
        }
        
        $subFolders = Get-ChildItem -Path $folderPath -Force
        $totalFolders = $subFolders.Count
        $currentFolder = 0
    
        $sortedFolders = $subFolders | ForEach-Object {
            $currentFolder++
            $progressPercent = [math]::Round(($currentFolder / $totalFolders) * 100, 2)
    
            # 更新进度条
            Write-Progress -Activity "正在处理目录" -Status "$($_.FullName)" -PercentComplete $progressPercent
    
            # 获取文件夹的大小
            $folderSize = Get-FolderSize -FolderPath $_.FullName
            [PSCustomObject]@{
                FolderName = $_.Name
                FolderSize = $folderSize
            }
        } | Sort-Object -Property FolderSize -Descending
        
        # 进度条完成
        Write-Progress -Activity "处理完成" -Status "所有目录已处理" -Completed
    
        # 显示文件夹名称和大小
        $sortedFolders | ForEach-Object {
            if (![string]::IsNullOrEmpty($_.FolderName)) {
                if ($_.FolderSize -ge 1GB) {
                    $formattedSize = "{0:N2} GB" -f ($_.FolderSize / 1GB)
                } else {
                    if ($_.FolderSize -ge 1MB) {
                        $formattedSize = "{0:N2} MB" -f ($_.FolderSize / 1MB)
                    } else {
                        $formattedSize = "{0:N2} KB" -f ($_.FolderSize / 1KB)
                    }
                }
                Write-Host "$($formattedSize) - $($_.FolderName)"
            }
        }
    
        # 输出错误信息
        if ($global:errors.Count -gt 0) {
            Write-Host "处理过程中出现以下错误:" -ForegroundColor Red
            $global:errors | ForEach-Object { Write-Host $_ -ForegroundColor Red }
        }
        
        $continue = Read-Host "是否继续循环?(Y/N)"
    } while ($continue -eq "Y" -or $continue -eq "y")
    






    温馨提示:
    1、本站所有内容均为互联网收集或网友分享或网络购买,本站不破解、不翻录任何视频!
    2、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意!
    3、本站资源仅供本站会员学习参考,不得传播及用于其他用途,学习完后请在24小时内自行删除.
    4、本站资源质量虽均经精心审查,但也难保万无一失,若发现资源有问题影响学习请一定及时点此进行问题反馈,我们会第一时间改正!
    5、若发现链接失效了请联系管理员,管理员会在2小时内修复
    6、如果有任何疑问,请加客服QQ:1300822626 2小时内回复你!
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    5 天前
  • 签到天数: 341 天

    [LV.8]以坛为家I

    2

    主题

    504

    帖子

    2101

    积分

    一代宗师

    Rank: 7Rank: 7Rank: 7

    积分
    2101

     楼主| 发表于 2024-8-8 12:11:54 | 显示全部楼层
    本帖最后由 LiuJiaCheng11 于 2024-8-8 12:18 编辑

    最大的居然是微信文件夹 image.png

    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|小黑屋|本站代理|dmz社区

    GMT+8, 2024-12-23 11:07 , Processed in 0.084925 second(s), 32 queries .

    Powered by Discuz! X3.4 Licensed

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表