windows下用powershell计算指定路径下的一级文件夹大小的小脚本

文章目录

准备

需要有管理员权限,用管理员权限打开powershell,而后执行命令以允许执行脚本。
如果出于安全原因 PowerShell 默认不允许运行未签名的脚本,你可能需要先运行以下命令来允许执行本地脚本:

Set-ExecutionPolicy RemoteSigned

但是,请注意,RemoteSigned 策略允许你运行本地脚本和来自 Internet 的已签名脚本。
如果你只是想临时允许执行所有脚本(仅在当前 PowerShell 会话中),你可以使用:

Set-ExecutionPolicy Unrestricted -Scope Process

但是,请谨慎使用 Unrestricted 策略,因为它可能会带来安全风险。

脚本内容

写的比较简单,报错处理没弄,但能用就行,要改的看着改吧。
程序是一直让输入路径,即使路径错误,直到输入quit,才会退出程序,否则一直循环等待计算指定路径下目录大小。

function CalculateDirectorySizes {  
    param (  
        [Parameter(Mandatory=$true)]  
        [string]$RootPath  
    )  
  
    # 检查输入路径是否为空或无效  
    if ([string]::IsNullOrWhiteSpace($RootPath) -or !(Test-Path -Path $RootPath -PathType Container)) {  
        Write-Host "输入的路径无效或为空,请重新输入。"  
        return $null  
    }  

    # 使用哈希表来存储不同单位的大小及其对应的目录  
    $sizeData = [ordered]@{} 
    $sizeData['GB'] = @()
    $sizeData['MB'] = @()
  
    Get-ChildItem -Path $RootPath -Directory | ForEach-Object {  
        $size = (Get-ChildItem -Path $_.FullName -Recurse -File | Measure-Object -Sum Length).Sum  
        $sizeMB = $size / 1MB
        $sizeGB = $size / 1GB

        # 根据大小选择合适的单位并存储  
        if ($sizeGB -ge 1) {  
            $sizeData['GB'] += [pscustomobject]@{Path=$_.FullName; Size = $sizeGB }  
        } elseif ($sizeMB -ge 500) {  
            $sizeData['MB'] += [pscustomobject]@{Path=$_.FullName; Size = $sizeMB }  
        } 
    }

    # 返回结果  
    return $sizeData  
}


# 主循环  
while ($true) {  
    # 提示用户输入目录路径或quit  
    $inputPath = Read-Host "请输入要检查大小的目录路径(输入'quit'退出)"  
  
    # 检查用户是否输入了'quit'  
    if ($inputPath.ToLower() -eq 'quit') {  
        Write-Host "退出程序。"  
        break  
    }  
    
    # 检查输入路径是否为空或仅包含空白字符  
    if ([string]::IsNullOrWhiteSpace($inputPath)) {  
        Write-Host "路径不能为空,请重新输入。"  
        continue  
    }
    
    # 调用函数并处理结果  
    $sizeData = CalculateDirectorySizes -RootPath $inputPath  
  
    # 检查路径是否有效  
    if ($sizeData -eq $null) {  
        continue  
    }  

    # 分别按GB和MB单位的大小从大到小排序并输出
    foreach ($unit in $sizeData.Keys) {  
        Write-Host "Size in $unit"
        $sizeData[$unit] | Sort-Object -Property Size -Descending | ForEach-Object {  
            Write-Host "$($_.Path): $($_.Size.ToString("F2")) $unit"  
        }  
        if ($unit -ne $sizeData.Keys[-1]) {  
            Write-Host "" # 在GB和MB之间添加空行以分隔  
        }  
    }
    Write-Host ""
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值