
Вы можете использовать PowerShell для вычисления точного размера определенной папки в Windows (рекурсивно, включая все подпапки). Таким образом, вы можете быстро узнать размер каталога на диске без использования сторонних инструментов, таких как TreeSize или WinDirStat. Кроме того, PowerShell позволяет более гибко фильтровать или исключать файлы (по типу, размеру или дате), которые необходимо учитывать при расчете размера папки.
Для расчета размера папки используйте следующие команды PowerShell:
- Get-ChildItem (
gci
псевдоним) — получение списка файлов (с указанием размеров) в каталоге (включая вложенные подкаталоги). Ранее мы показывали, как использовать команду Get-ChildItem для поиска самых больших файлов на диске. - Measure-Object (
measure
alias) — суммирует размеры всех файлов для получения общего размера каталога.
Например, чтобы узнать размер каталога D:\ISO каталог в GB, запустите:
(Get-ChildItem D:\ISO -force -Recurse -ErrorAction SilentlyContinue| measure Length -sum).sum / 1Gb
Используемые параметры:
-Force
— включать скрытые и системные файлы-Recure
— получить список файлов во вложенных папках-ErrorAction SilentlyContinue
— игнорировать файлы и папки, к которым текущий пользователь не имеет доступа-measure Length -sum
— сумма размеров всех файлов (свойство Length).sum/ 1Gb
— показать общий размер в ГБ
В этом примере размер каталога составляет около 37 ГБ (эта команда PowerShell игнорирует сжатие файловой системы NTFS, если оно включено).
Чтобы округлить результаты до двух знаков после запятой, используйте команду:
"{0:N2} GB" -f ((Get-ChildItem D:\ISO -force -Recurse -ErrorAction SilentlyContinue| measure Length -sum).sum / 1Gb)
PowerShell может найти общий размер всех файлов определенного типа в каталоге. Например, добавьте команду *.iso параметр, чтобы узнать, сколько места занимают файлы ISO:
"{0:N2} GB" -f ((Get-ChildItem D:\ISO *.iso -force -Recurse -ErrorAction SilentlyContinue| measure Length -sum).sum / 1Gb)
Вы можете использовать другие фильтры для выбора файлов, которые будут включены в расчет размера каталога. Например, чтобы увидеть размер файлов в каталоге, созданном в 2024 году:
(gci -force D:\ISO –Recurse -ErrorAction SilentlyContinue | ? {$_.CreationTime -gt '1/1/24’ -AND $_.CreationTime -lt '12/31/24'}| measure Length -sum).sum / 1Gb
Если в каталоге есть символические или жесткие ссылки, приведенная выше команда PowerShell отобразит неверный размер папки. Например. C:\Windows
содержит множество жестких ссылок на файлы в папке WinSxS (Windows Component Store). Такие файлы могут быть учтены несколько раз. Чтобы игнорировать жесткие ссылки, используйте следующую команду:
"{0:N2} GB" -f ((gci –force C:\Windows –Recurse -ErrorAction SilentlyContinue | Where-Object { $_.LinkType -notmatch "HardLink" }| measure Length -s).sum / 1Gb)
Получите размеры всех подпапок верхнего уровня в целевой папке и количество файлов в каждой подпапке (в этом примере сценарий PowerShell отображает размер всех профилей пользователей в C:\Users
):
$targetfolder="C:\Users" $dataColl = @() gci -force $targetfolder -ErrorAction SilentlyContinue | ? { $_ -is [io.directoryinfo] } | % { $len = 0 gci -recurse -force $_.fullname -ErrorAction SilentlyContinue | % { $len += $_.length } $filesCount = (gci -recurse -force $_.fullname -File -ErrorAction SilentlyContinue | Measure-Object).Count $dataObject = New-Object PSObject -Property @{ Folder = $_.fullname SizeGb = ('{0:N3}' -f ($len / 1Gb)) -as [single] filesCount=$filesCount } $dataColl += $dataObject } $dataColl | Out-GridView -Title "Subfolder sizes and number of files"
%
это псевдоним для foreach-object
цикла.Сценарий отобразит графическую таблицу Out-GridView, в которой будут перечислены папки, их размеры и количество содержащихся в них файлов. Папки в таблице можно отсортировать по размеру или количеству файлов в форме Out-GridView. Результаты можно также экспортировать в файл CSV (| Export-Csv folder_size.csv
) или в файл Excel.