【PowerShell自定义命令】查看指定目录下文件夹或文件大小(降序)

21 阅读1分钟

前言

  内容接上篇文章:【PowerShell】查看指定目录下文件夹或文件大小(降序),在PowerShell可以自定义命令,方便每次直接调用,避免重开PowerShell时复制粘贴。直接让DeepSeek把之前的命令转化为需要配置的代码,还顺便优化一些展示效果。

操作说明

  (1)在PowerShell中输入以下命令,新建个人资料文件。

if (!(Test-Path -Path $PROFILE)) {
  New-Item -ItemType File -Path $PROFILE -Force
}

  (2)用记事本打开个人资料文件。

notepad $PROFILE

  (3)将准备好的配置代码复制粘贴写入文件。因为可能涉及编码问题,本人将输出信息里的中文改为英文,不影响本身的功能。

function Get-FolderSize {
    
    param(
        [Parameter(Position=0)]
        [string]$Path = "."
    )
    
    # 验证路径
    if (-not (Test-Path -Path $Path -PathType Container)) {
        Write-Error "'$Path' do not exist!!!"
        return
    }
    
    # 获取完整路径
    $fullPath = (Resolve-Path $Path).Path
    
    # 获取所有子目录并计算大小
    Get-ChildItem -Path $fullPath -Directory | ForEach-Object {
        $folder = $_
        
        try {
            # 获取文件夹中所有文件
            $files = Get-ChildItem -Path $folder.FullName -Recurse -File -ErrorAction SilentlyContinue
            
            # 计算总大小
            $folderSize = ($files | Measure-Object -Property Length -Sum).Sum
            
            # 如果没有文件,大小为0
            if (-not $folderSize) { $folderSize = 0 }
            
            # 创建结果对象
            [PSCustomObject]@{
                FolderName = $folder.Name
                Size_MB    = [math]::Round($folderSize / 1MB, 2)
                Size_GB    = [math]::Round($folderSize / 1GB, 3)
                FileCount  = $files.Count
                FullPath   = $folder.FullName
            }
        } catch {
            Write-Warning "Can not get size of '$($folder.Name)' : $_"
        }
    } | Sort-Object Size_MB -Descending | Format-Table -AutoSize
}

# 设置别名
Set-Alias -Name fs -Value Get-FolderSize

# 设置Roaming和Local两个常用路径为固定变量方便使用
$Roaming=$HOME+"\AppData\Roaming"
$Local=$HOME+"\AppData\Local"

  (4)用命令手动加载文件,或者重开PowerShell。注意.和$PROFILE之间是一个空格。

. $PROFILE

  (5)使用fs(别名)验证是否加载成功。

测试.png

验证结果

使用说明

  (1)以上代码中,本人将AppData\Roaming和AppData\Local这两个常用文件夹路径预设为变量,方便直接使用。

变量.png

预设变量

  (2)命令支持以下几种格式。

# 使用完整指令名称,不指定参数则默认返回当前路径下的结果
Get-FolderSize

# 使用别名,不指定参数则默认返回当前路径下的结果
fs

# 指定路径
fs D:\
fs "C:\Program Files"
fs $Roaming
fs -Path D:\
...

其他说明

  (1)相关微软官方文档链接:自定义 shell 环境 - PowerShell | Microsoft Learn