PowerShell获取驱动器列表、查询高占用文件/文件夹并删除其内文本文件
PowerShell 磁盘高占用对象查询及文本文件清理脚本实现
驱动器列表获取
原使用的Get-WMIObject已被PowerShell官方标记为过时,推荐使用兼容性与性能更佳的Get-CimInstance实现,可按需筛选磁盘类型:
# 仅筛选本地固定磁盘(DriveType=3),如需包含移动存储、光驱等可删除Where-Object筛选条件 Get-CimInstance -ClassName Win32_LogicalDisk | Where-Object DriveType -eq 3 | Sort-Object DeviceID
高占用文件/文件夹查询
Get-ChildItem默认不返回文件夹的总占用大小,需要额外递归统计每个对象的总大小后再排序,示例代码如下(可自定义要查询的驱动器、返回的高占用对象数量):
# 配置参数 $targetDrive = "C:\" # 要查询的驱动器根路径 $topCount = 5 # 取占用最高的前N个对象 # 统计根目录下每个文件/文件夹的总大小,按占用降序排序 $highUsageItems = Get-ChildItem -Path $targetDrive -Force | ForEach-Object { # 计算对象总大小:文件夹递归统计所有子文件大小之和,文件直接取自身大小 $totalSize = if ($_.PSIsContainer) { (Get-ChildItem -Path $_.FullName -Recurse -Force -File -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum } else { $_.Length } # 输出带可读大小的自定义对象 [PSCustomObject]@{ 路径 = $_.FullName 类型 = $_.PSIsContainer ? "文件夹" : "文件" 总占用 = $totalSize 占用可读 = switch ($totalSize) { {$_ -ge 1GB} {"{0:N2} GB" -f ($_/1GB)} {$_ -ge 1MB} {"{0:N2} MB" -f ($_/1MB)} default {"{0:N2} KB" -f ($_/1KB)} } } } | Sort-Object 总占用 -Descending | Select-Object -First $topCount # 输出高占用对象列表 $highUsageItems | Format-Table -AutoSize
高占用对象内文本文件删除
警告:删除操作不可逆,建议先运行注释删除命令的版本,确认要删除的文件列表无误后再开启删除逻辑
foreach ($item in $highUsageItems) { # 搜索对应对象下的所有txt文本文件,可自行修改Filter匹配更多文本后缀(如*.log、*.md等) $txtFiles = if ($item.类型 -eq "文件夹") { Get-ChildItem -Path $item.路径 -Recurse -Force -Filter *.txt -ErrorAction SilentlyContinue } else { # 单文件判断自身是否为txt后缀 if ($item.路径 -like "*.txt") { Get-Item -Path $item.路径 -Force } } if ($txtFiles) { Write-Host "`n待删除文本文件列表:" $txtFiles | Select-Object FullName, Length | Format-Table -AutoSize # 确认无误后取消下方注释执行删除 # $txtFiles | Remove-Item -Force -ErrorAction SilentlyContinue } }
注意事项
- 脚本需要以管理员权限运行,否则访问系统保护目录会出现权限不足的问题
- 如需要扫描全磁盘所有文件而非仅根目录下的一级对象,可修改Get-ChildItem的参数添加
-Recurse即可
内容的提问来源于stack exchange,提问作者sanya jain
相关产品推荐
相关产品推荐

