前言
内容接上篇文章:【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(别名)验证是否加载成功。
验证结果
使用说明
(1)以上代码中,本人将AppData\Roaming和AppData\Local这两个常用文件夹路径预设为变量,方便直接使用。
预设变量
(2)命令支持以下几种格式。
# 使用完整指令名称,不指定参数则默认返回当前路径下的结果
Get-FolderSize
# 使用别名,不指定参数则默认返回当前路径下的结果
fs
# 指定路径
fs D:\
fs "C:\Program Files"
fs $Roaming
fs -Path D:\
...
其他说明
(1)相关微软官方文档链接:自定义 shell 环境 - PowerShell | Microsoft Learn