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

[玩转系统] 如何在 PowerShell 中获取文件夹的大小 |在 PowerShell 中获取文件夹大小(以 GB 为单位)

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

如何在 PowerShell 中获取文件夹的大小 |在 PowerShell 中获取文件夹大小(以 GB 为单位)


最近,我需要在PowerShell中获取文件夹的大小。在这篇博文中,我们将探索使用 PowerShell 获取文件夹大小的不同方法或 cmdlet,并附有示例和脚本。

要使用 PowerShell 获取文件夹的大小,您可以将 Get-ChildItem cmdlet 与 Measure-Object cmdlet 结合使用。例如,$folderSize=(Get-ChildItem -Path “C:\ExampleFolder” -Recurse -File | Measure-Object -Property Length -Sum).Sum 将为您提供文件夹的大小(以字节为单位)。

如何在 PowerShell 中获取文件夹的大小

有多种方法可以在 PowerShell 中获取文件夹的大小。让我们通过示例来讨论每种方法。

1. 使用 Get-ChildItem 和 Measure-Object

在 PowerShell 中计算文件夹大小的最简单方法之一是结合使用 Get-ChildItem cmdlet 和 Measure-ObjectGet-ChildItem cmdlet 检索指定目录中的文件和文件夹,Measure-Object 计算这些对象的属性,例如它们的大小总和。

以下是如何使用这些 cmdlet 获取 PowerShell 中文件夹大小的基本示例:

$folderPath = "C:\MyFolder"
$folderSize = (Get-ChildItem -Path $folderPath -Recurse -File | Measure-Object -Property Length -Sum).Sum
$folderSizeInMB = [math]::Round($folderSize / 1MB, 2)
Write-Host "The size of $folderPath is $folderSizeInMB MB"

在此脚本中,我们指定文件夹路径并使用 -Recurse 标志来包含所有子文件夹和文件。 -File 开关确保仅测量文件,而不测量子目录。然后,Measure-Object cmdlet 将通过管道传输来汇总所有文件的 Length 属性,该属性表示文件的大小(以字节为单位)。最后,我们将大小转换为兆字节以便于阅读。

查看下面的屏幕截图,了解我使用 VS code 执行 PowerShell 脚本后的输出。

[玩转系统] 如何在 PowerShell 中获取文件夹的大小 |在 PowerShell 中获取文件夹大小(以 GB 为单位)

2. 使用 COM 对象提高性能

对于较大的目录,您可能会注意到 Get-ChildItem 方法可能会很慢。为了加快该过程,您可以使用 COM 对象,例如 Scripting.FileSystemObject,它提供了一种更快的方法来获取文件夹大小。

以下是如何使用 COM 对象获取 PowerShell 中文件夹的大小:

$folderPath = "C:\MyFolder"
$fsObject = New-Object -ComObject Scripting.FileSystemObject
$folder = $fsObject.GetFolder($folderPath)
$folderSize = $folder.Size
$folderSizeInGB = [math]::Round($folderSize / 1GB, 2)
Write-Host "The size of $folderPath is $folderSizeInGB GB"

此脚本为文件系统操作创建一个新的 COM 对象并检索指定文件夹的大小。然后将大小转换为千兆字节,以便更方便地测量。

3. 使用 Robocopy 进行高级脚本编写

获取文件夹大小的另一种高级方法是使用robocopy.exe。 Robocopy 是 Windows 中包含的一个强大的文件复制命令行工具,但它也可用于通过启用其日志记录功能然后解析输出来计算文件夹大小。

以下是使用 Robocopy 获取文件夹大小的示例:

$folderPath = "C:\ExampleFolder"
$tempFile = "C:\temp\robocopy_log.txt"
robocopy $folderPath $folderPath /L /XJ /E /NFL /NDL /NJH /NJS /nc /ns /np > $tempFile
$folderSize = (Select-String "Bytes :.*" $tempFile -AllMatches | ForEach-Object { $_.Matches } | ForEach-Object { $_.Value.Split(":")[1].Trim() } | Measure-Object -Sum).Sum
$folderSizeInTB = [math]::Round($folderSize / 1TB, 4)
Write-Host "The size of $folderPath is $folderSizeInTB TB"

该脚本使用robocopy 生成日志文件,而不实际复制任何文件(/L 开关)。然后,它解析日志以查找总字节并将大小转换为 TB。

以人类可读的格式显示文件夹大小

当向用户显示文件夹大小时,以人类可读的方式格式化大小通常很有帮助,例如 KB、MB、GB 等。下面是获取文件夹大小并将其转换为更易读的格式的 PowerShell 脚本:

function Format-FileSize {
    Param ([int64]$size)
    If ($size -gt 1TB) {
        [math]::Round($size / 1TB, 2).ToString() + " TB"
    } ElseIf ($size -gt 1GB) {
        [math]::Round($size / 1GB, 2).ToString() + " GB"
    } ElseIf ($size -gt 1MB) {
        [math]::Round($size / 1MB, 2).ToString() + " MB"
    } ElseIf ($size -gt 1KB) {
        [math]::Round($size / 1KB, 2).ToString() + " KB"
    } Else {
        $size.ToString() + " B"
    }
}

$folderPath = "C:\MyFolder"
$folderSize = (Get-ChildItem -Path $folderPath -Recurse -File | Measure-Object -Property Length -Sum).Sum
$readableSize = Format-FileSize -size $folderSize
Write-Host "The size of $folderPath is $readableSize"

此脚本定义了一个函数Format-FileSize,该函数获取字节大小并将其转换为最大的适当单位,然后附加单位缩写。然后它会计算文件夹大小并使用此函数对其进行格式化。

在 PowerShell 中获取文件夹大小(以 GB 为单位)

要使用 PowerShell 获取文件夹的大小(以千兆字节 (GB) 为单位),您通常需要将 Get-ChildItem cmdlet 与 Measure-Object 结合使用。 Get-ChildItem cmdlet 检索指定目录中的所有项目(文件和文件夹),Measure-Object 将计算这些项目的大小总和。由于默认情况下大小以字节为单位计算,因此您需要将其转换为千兆字节。

以下是该过程的详细分解:

  1. 检索项目:使用Get-ChildItem列出目标文件夹中的所有文件。 -Recurse 参数确保命令包含所有子文件夹及其文件。
  2. 测量大小:将 Get-ChildItem 的输出通过管道传输到 Measure-Object,以求和的 Length 属性所有文件,表示它们的大小(以字节为单位)。
  3. 转换为 GB:由于默认输出以字节为单位,因此您需要将其转换为千兆字节。一千兆字节有 1,073,741,824 字节(1GB=2^30 字节)。

下面是封装此过程的 PowerShell 脚本:

# Define the path of the folder you want to measure
$folderPath = "C:\MyFolder"

# Get the size of the folder in bytes
$folderSizeBytes = (Get-ChildItem -Path $folderPath -Recurse -File | Measure-Object -Property Length -Sum).Sum

# Convert the size to gigabytes
$folderSizeGB = [math]::Round($folderSizeBytes / 1GB, 2)

# Output the folder size in GB
Write-Host "The size of the folder is $folderSizeGB GB"

在此脚本中:

  • $folderPath 应替换为目标文件夹的路径。
  • -File 参数用于确保仅测量文件,而不测量子目录本身。
  • [math]::Round() 用于将结果四舍五入到小数点后两位以方便阅读。

请记住,此方法根据文件的实际数据长度计算大小,并且不考虑由于文件系统分配单元大小而导致的任何潜在开销,这可能会使磁盘上的大小略大于文件大小的总和。

在 PowerShell 中获取文件夹大小和文件计数

我的一位客户要求获取文件夹大小和文件计数,我使用 PowerShell 做到了这一点。

PowerShell 提供的查找文件夹大小及其包含的文件数量的最简单方法之一是使用带有 Measure-Object 的 Get-ChildItem cmdlet。 Get-ChildItem cmdlet 检索指定路径中的文件和文件夹,Measure-Object 计算对象的属性,例如其大小总和。

这是一个完整的 PowerShell 脚本,它将提供文件夹大小以及文件计数。

$FolderPath = "C:\MyFolder"
$Files = Get-ChildItem -Path $FolderPath -Recurse -File
$Folders = Get-ChildItem -Path $FolderPath -Recurse -Directory

$TotalSize = ($Files | Measure-Object -Property Length -Sum).Sum
$FileCount = $Files.Count
$FolderCount = $Folders.Count

$TotalSizeInMB = [math]::Round($TotalSize / 1MB, 2)

Write-Host "Total size: $TotalSizeInMB MB"
Write-Host "Number of files: $FileCount"
Write-Host "Number of folders: $FolderCount"

当我使用 VS code 执行脚本后,您可以在下面的屏幕截图中看到输出,它提供了文件夹大小(以 MB 为单位)和文件计数。

[玩转系统] 如何在 PowerShell 中获取文件夹的大小 |在 PowerShell 中获取文件夹大小(以 GB 为单位)

结论

PowerShell 提供了多种确定文件夹大小的方法。在本教程中,我解释了如何在 PowerShell 中获取以 GB 为单位的文件夹大小。另外,我还解释了如何在 PowerShell 中获取文件夹大小和文件计数。

此外,我们还了解了如何在 PowerShell 中以人类可读的格式显示文件夹大小。

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

取消回复欢迎 发表评论:

关灯