Как узнать размер папки в Windows с помощью PowerShell

Если нужно выяснить, какие папки занимают диск, проверьте размер папки. Это полезно перед переносом большого каталога на USB-накопитель или в облако. В Проводнике Windows размер вычисляется через Свойства папки, но это медленно для больших директорий и неудобно для массового управления на многих компьютерах. PowerShell позволяет посчитать объём быстро и автоматизировать процесс.
Ключевые команды и смысл
Коротко:
- Get-ChildItem (alias gci или cgi) — перечисляет элементы каталога. Опция -File ограничивает вывод файлами, -Directory — папками.
- Measure-Object (alias measure) — суммирует свойства объектов. В нашем случае мы суммируем Length (длину/размер в байтах).
- Параметр -Recurse — рекурсивный обход поддиректорий.
- -Force — включает скрытые и системные файлы.
Определение терминов (в одну строку):
- Length — размер файла в байтах.
- .Sum — свойство результата Measure-Object, содержащее итоговую сумму.
Важно: PowerShell возвращает размер в байтах. Для удобного чтения делите на 1Kb, 1Mb, 1Gb (PowerShell понимает эти суффиксы).
Как вычислить размер папки (шаги)
Следуйте этим шагам для базовой проверки размера:
- Нажмите клавишу Win и введите powershell.
- Правой кнопкой мыши выберите Windows PowerShell и Запустить от имени администратора. Подтвердите UAC.
- В окне PowerShell введите команду (пример приведён ниже) и нажмите Enter.
Оригинальная команда из примера (сохраняется без изменений):
` Get-ChildItem FolderPath | Measure-Object -Property Length -sum`
В этой команде замените FolderPath на путь к вашей папке, например E:\Download. Пример из источника (сохранён):
`Get-ChildItem E:\Download | Measure-Object -Property Length -sum`
Вывод покажет количество элементов и суммарный размер в байтах. Чтобы перевести в КБ/МБ/ГБ, делите на 1024 последовательно или используйте встроенные сокращения PowerShell (1Mb, 1Gb).
Альтернативное получение суммы через .sum (оригинал сохранён):
`(gci E:\Download | measure Length -s).sum / 1Mb`
И для гигабайт:
`(gci E:\Download | measure Length -s).sum / 1Gb`
Примечание: в примерах используется alias gci — это укороченная форма Get-ChildItem.
Локализация форматов дат и даты в фильтрах
Когда вы фильтруете файлы по CreationTime или LastWriteTime, PowerShell сравнивает объекты DateTime. Лучше задавать даты в ISO-формате или в том формате, который точно понимает ваша система. В русской локали удобнее использовать ‘yyyy-MM-dd’ или приводить строку к [datetime]:
Пример корректного фильтра по дате (локализованная версия):
(gci -Force E:\Download -Recurse -ErrorAction SilentlyContinue | ? { $_.CreationTime -gt [datetime]'2023-06-01' -and $_.CreationTime -lt [datetime]'2023-07-01' } | measure Length -s).sum / 1GbВажно: не все системы одинаково парсят формат mm/dd/yy; рекомендую использовать ‘yyyy-MM-dd’ или явное приведение к [datetime].
Как получить размер подпапок рекурсивно
Чтобы посчитать суммарный размер папки и всех вложенных файлов, используйте -Recurse и -Force. Пример (сохранён):
`((gci -force c:\Users -Recurse -ErrorAction SilentlyContinue| measure Length -s).sum / 1Gb) `
Этот пример показывает суммарный размер в гигабайтах. Параметр -ErrorAction SilentlyContinue подавляет сообщения об ошибках (например, о доступе к защищённым файлам).
Полезный приём: если хотите исключить определённые типы файлов или папки, фильтруйте объекты через Where-Object (?), указывая критерии по Extension, LastWriteTime и т.д.
Как вывести размеры подпапок в табличном виде (GridView)
Если нужно видеть отдельные подпапки и их размеры, удобнее получить коллекцию объектов и открыть её в Out-GridView. Оригинальный скрипт для PowerShell ISE (сохранён):
` $targetfolder = 'C:\'
$dataColl = Get-ChildItem -Force $targetfolder -Directory -ErrorAction SilentlyContinue | ForEach-Object {
$len = Get-ChildItem -Recurse -Force $_.FullName -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum | Select-Object -ExpandProperty Sum
$foldername = $_.FullName
$foldersize = '{0:N2} GB' -f ($len / 1Gb)
[PSCustomObject]@{
foldername = $foldername
foldersizeGb = $foldersize
}
}
$dataColl | Out-GridView -Title "Size of Subdirectories in $targetfolder"
Запустите в PowerShell ISE (или обычном PowerShell с GUI) — появится окно с таблицей, удобной для сортировки и фильтрации.
Совет: при больших каталогах выполнение займёт время; для ускорения можно параллелить операции с помощью ForEach-Object -Parallel (PowerShell 7+) или собирать статистику по отдельным веткам.
Поиск размера файлов по типу
Чтобы узнать, сколько места занимают файлы определённого расширения, используйте wildcard. Оригинальный пример (сохранён):
`(gci E:\download *.jpg | measure Length -s).sum / 1Mb `
Локализованный пример с учётом поддиректорий:
(Get-ChildItem E:\download -Recurse -Include *.jpg -File -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum / 1MbЭто быстро показывает, занимают ли изображения основную долю места. Аналогично можно проверять видеоконтент .mp4, архивы .zip и т.д.
Примеры альтернативных подходов
- GUI-инструменты (SpaceSniffer, WinDirStat, TreeSize) дают визуальный анализ и удобны непрофессионалам.
- Сценарии PowerShell удобны для автоматизации, отчётности и удалённого запуска через WinRM или PowerShell Remoting.
- На серверах (особенно с большим количеством мелких файлов) стоит комбинировать — быструю агрегацию через PowerShell и глубокий анализ через специализированные утилиты.
Когда способ PowerShell даёт неверный или неполный результат
- Если у вас нет прав на чтение файлов или папок — Measure-Object пропустит эти элементы или выдаст ошибки; используйте учётные записи с нужными правами.
- Символьные ссылки и точки монтирования могут дублировать подсчёт — учитывайте junction и reparse points.
- Файлы, занятые системой (блокировки), могут быть недоступны для чтения; команда вернёт меньше, чем реально используется на диске из-за выделенных, но не освобождённых областей.
Важно: различайте «логику подсчёта размеров файлов» и «заполненность диска» — проблема с аллокацией и метаданными (например, различие между фактическим размером и выделенными кластерами) потребует других инструментов.
Чек-листы по ролям
Администратор:
- Проверить права на целевые папки.
- Использовать -ErrorAction SilentlyContinue и вести лог ошибок.
- Автоматизировать сбор в расписании (Task Scheduler) и сохранять CSV/HTML отчёты.
- Обрабатывать junction/монтирования, чтобы избежать двойного подсчёта.
Обычный пользователь:
- Использовать простую команду gci | measure для папок на локальном диске.
- При слабой уверенности — применять GUI-инструмент.
- Делать резервную копию перед массовым удалением.
Шпаргалка команд (cheat sheet)
| Задача | Команда (пример) | Комментарий |
|---|
| Суммарный размер папки (байты) | `Get-ChildItem E:\Download | Measure-Object -Property Length -Sum` | Базовый подсчёт, не рекурсивный |
| Размер в MB | `(gci E:\Download | measure Length -s).sum / 1Mb` | Использует alias gci и measure |
| Рекурсивный размер в GB | `((gci -force c:\Users -Recurse -ErrorAction SilentlyContinue | measure Length -s).sum / 1Gb)` | Включает скрытые файлы |
| Размер по расширению (рекурсивно) | `(Get-ChildItem E:\download -Recurse -Include *.jpg -File | Measure-Object Length -Sum).Sum / 1Mb` | Поддерживает вложенные папки |
| Таблица размеров подпапок | (скрипт с Out-GridView выше) | Для визуального анализа |
Пример методологии — как системно освободить место (мини-план)
- Быстрая диагностика: собрать суммарные размеры корневых папок (C:\, D:\ и т.д.).
- Узкая фильтрация: для крупных директорий определить по расширениям, какие типы занимают больше всего (например, .mp4, .iso).
- Проверка сроков: отбросить старые временные файлы и бэкапы по дате.
- Политика действий: удалить ненужные, переместить архивы на NAS/облако, сжать данные.
- Автоматизация: настроить периодические скрипты и оповещения при превышении порога.
Модель принятия решений (короткий сценарий)
Mermaid-диаграмма ниже помогает выбрать инструмент:
flowchart TD
A[Нужно узнать, что занимает диск?] --> B{Нужно ли автоматизировать?}
B -- Да --> C[Использовать PowerShell, планировщик, логирование]
B -- Нет --> D{Нужно ли визуальное представление?}
D -- Да --> E[WinDirStat/TreeSize]
D -- Нет --> F[Использовать Проводник или простую команду gci|measure]
C --> G[Собрать отчёты и автоматизировать]
E --> G
F --> GБезопасность и риски
- Запускать команды с правами администратора только при необходимости.
- При массовом удалении используйте флаг -WhatIf или сначала сохраняйте список файлов в CSV.
- Отслеживайте junction и hardlink, чтобы не удалить нужные данные.
Советы по производительности
- Для очень больших каталогов измерения могут занимать минуты; отсеивайте по расширениям и параллелите запросы, если используете PowerShell 7+.
- Избегайте одновременной проверки всего диска из нескольких задач — это будет создавать высокую нагрузку I/O.
Короткая сводка
PowerShell даёт гибкие инструменты для измерения размера папок и автоматизации задач по очистке диска. Для единичных случаев удобнее GUI, для регулярного контроля и действий на многих машинах — скрипты PowerShell.
Важное: перед массовым удалением делайте резервные копии и проверяйте права доступа.
Краткие рекомендации для публикации отчёта (SOP)
- Запустить скрипт-диагностику на целевых машинах.
- Сохранить результаты в CSV и отправить на централизованный сервер.
- Отфильтровать каталоги по порогу (например, >5Gb) и подготовить план освобождения места.
- Выполнить перемещение/архивацию и повторно снять отчёт для верификации.
Краткое резюме:
- Используйте Get-ChildItem + Measure-Object для подсчёта размеров.
- Добавляйте -Recurse и -Force для рекурсивных и скрытых объектов.
- Для визуализации применяйте Out-GridView или GUI-инструменты.
- Автоматизируйте сбор и верификацию для регулярного мониторинга.
Похожие материалы
Изменение метаданных файла в Windows
Как выбрать Ethernet‑кабель: Cat‑5e, Cat‑6, Cat‑6a и другие
Исправить No Audio Output Device is installed — руководство
Настройка Bash-приглашения: практический гайд
QR‑код в Google Chrome на Android