当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell:在 Windows 中获取磁盘上的文件夹大小

作者:精品下载站 日期:2024-12-14 23:07:45 浏览:12 分类:玩电脑

PowerShell:在 Windows 中获取磁盘上的文件夹大小


大多数 Windows 用户都知道检查文件夹大小的最简单方法是在文件资源管理器中打开文件夹属性。更有经验的用户更喜欢使用第三方工具,例如 TreeSizeWinDirStat。但是,如果您想获得有关特定目录中文件夹大小的更详细统计信息或排除某些文件类型,您最好使用PowerShell功能。在本文中,我们将向您展示如何使用 PowerShell 快速获取磁盘上特定文件夹(以及所有子文件夹)的大小。

您可以使用 Get-ChildItem (

gci

别名)和测量对象 (

measure

alias) cmdlet 用于获取 PowerShell 中文件和文件夹(包括子文件夹)的大小。第一个 cmdlet 允许您根据指定条件获取指定目录中的文件列表(具有大小),第二个 cmdlet 执行算术运算。

提示。在之前的一篇文章中,我们演示了如何在 PowerShell 中使用 Get-ChildItem cmdlet 查找磁盘上最大的文件。

例如,要获取 C:\ISO 文件夹的大小,请运行以下命令:

Get-ChildItem C:\ISO | Measure-Object -Property Length -sum

[玩转系统] PowerShell:在 Windows 中获取磁盘上的文件夹大小

正如您所看到的,该目录中文件的总大小显示在 Sum 字段中,大约为 2.1 GB(大小以字节为单位)。

要将大小转换为更方便的 MB 或 GB,请使用以下命令:

(gci c:\iso | measure Length -s).sum / 1Gb

或者 :

(gci c:\iso | measure Length -s).sum / 1Mb

要将结果四舍五入到小数点后两位,请运行以下命令:

"{0:N2} GB" -f ((gci c:\iso | measure Length -s).sum / 1Gb)

[玩转系统] PowerShell:在 Windows 中获取磁盘上的文件夹大小

您可以使用 PowerShell 计算目录中某种类型的所有文件的总大小。例如,您想要获取文件夹中所有 ISO 文件的总大小:

(gci c:\iso *.iso | measure Length -s).sum / 1Mb

[玩转系统] PowerShell:在 Windows 中获取磁盘上的文件夹大小

上面显示的命令允许您仅获取指定目录中文件的总大小。如果目录中有子文件夹,则不计算子文件夹中文件的大小。要获取目录(包括子目录)中文件的总大小,请使用

-Recurse

范围。让我们获取 C:\Windows 文件夹中文件的总大小:

"{0:N2} GB" -f ((gci -force c:\Windows -Recurse -ErrorAction SilentlyContinue| measure Length -s).sum / 1Gb)

为了考虑隐藏文件和系统文件的大小,我还使用了 -force 参数。

因此,我的本地驱动器上的 C:\Windows 大小约为 40 GB(脚本忽略 NTFS 压缩)。

提示。为了防止目录访问错误(PermissionDenied -> DirUnauthorizedAccessError),请使用

 -ErrorAction SilentlyContinue

范围。

[玩转系统] PowerShell:在 Windows 中获取磁盘上的文件夹大小

如果目录包含符号链接或硬链接,则此脚本会错误地计算目录的大小。例如,

C:\Windows

文件夹包含许多指向 WinSxS 文件夹(Windows 组件存储)中文件的硬链接。因此,此类文件可以被计数多次。要忽略结果中的硬链接,请使用以下命令(需要很长时间才能完成):

"{0:N2} GB" -f ((gci -force C:\windows -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.LinkType -notmatch "HardLink" }| measure Length -s).sum / 1Gb)

[玩转系统] PowerShell:在 Windows 中获取磁盘上的文件夹大小

如您所见,Windows 文件夹的实际大小稍小一些。

您可以使用过滤器来选择计算最终大小时要考虑的文件。例如,您可以获得 2020 年创建的文件的大小:

(gci -force c:\ps -Recurse -ErrorAction SilentlyContinue | ? {$_.CreationTime -gt ‘1/1/20’ -AND $_.CreationTime -lt ‘12/31/20’}| measure Length -s).sum / 1Gb

可以获取指定目录下所有一级子文件夹的大小。例如,您想要获取文件夹 C:\Users 中所有用户配置文件的大小。

gci -force 'C:\Users'-ErrorAction SilentlyContinue | ? { $_ -is [io.directoryinfo] } | % {
$len = 0
gci -recurse -force $_.fullname -ErrorAction SilentlyContinue | % { $len += $_.length }
$_.fullname, '{0:N2} GB' -f ($len / 1Gb)
}

[玩转系统] PowerShell:在 Windows 中获取磁盘上的文件夹大小

%

是一个别名

foreach-object

环形。

我们继续。假设您的任务是查找系统硬盘根目录中每个目录的大小,并将信息以方便的表格形式呈现以供分析,并且能够按文件夹大小排序。

要获取有关系统 C:\ 驱动器上目录大小的信息,请运行以下 PowerShell 脚本:

$targetfolder='C:\'
$dataColl = @()
gci -force $targetfolder -ErrorAction SilentlyContinue | ? { $_ -is [io.directoryinfo] } | % {
$len = 0
gci -recurse -force $_.fullname -ErrorAction SilentlyContinue | % { $len += $_.length }
$foldername = $_.fullname
$foldersize= '{0:N2}' -f ($len / 1Gb)
$dataObject = New-Object PSObject
Add-Member -inputObject $dataObject -memberType NoteProperty -name “foldername” -value $foldername
Add-Member -inputObject $dataObject -memberType NoteProperty -name “foldersizeGb” -value $foldersize
$dataColl += $dataObject
}
$dataColl | Out-GridView -Title “Size of subdirectories”

[玩转系统] PowerShell:在 Windows 中获取磁盘上的文件夹大小

正如您所看到的,表格的图形视图应该出现在系统驱动器 C:\ 根目录中的所有文件夹及其大小的位置(该表格是由

Out-GridView

命令)。通过单击列标题,您可以按大小对文件夹进行排序。您还可以将结果导出到 CSV (

| Export-Csv folder_size.csv

) 或 Excel 文件。

如果您在 PowerShell 脚本中使用目录大小检查,则可以创建一个单独的函数:


function Get-FolderSize {
[CmdletBinding()]
Param (
[Parameter(Mandatory=$true,ValueFromPipeline=$true)]
$Path
)
if ( (Test-Path $Path) -and (Get-Item $Path).PSIsContainer ) {
$Measure = Get-ChildItem $Path -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum
$Sum = '{0:N2}' -f ($Measure.Sum / 1Gb)
[PSCustomObject]@{
"Path" = $Path
"Size($Gb)" = $Sum
}
}
}

要使用该函数,只需运行带有文件夹路径作为参数的命令:

Get-FolderSize ('C:\PS')

[玩转系统] PowerShell:在 Windows 中获取磁盘上的文件夹大小

您可以使用本地 PowerShell 功能通过以下方式检查远程计算机上的文件夹大小:

Invoke-Command

(PowerShell 远程处理)cmdlet。

Invoke-Command -ComputerName hq-srv01 -ScriptBlock ${Function:Get-FolderSize} -ArgumentList 'C:\PS'

[玩转系统] PowerShell:在 Windows 中获取磁盘上的文件夹大小

这些命令适用于所有 PowerShell 版本,包括较新版本的 PowerShell Core 7.x。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯