Возможно ли в Windows получить размер папки из командной строки без использования сторонних инструментов?
Мне нужен тот же результат, что и при щелчке правой кнопкой мыши по папке в проводнике Windows → свойства.
источник
Возможно ли в Windows получить размер папки из командной строки без использования сторонних инструментов?
Мне нужен тот же результат, что и при щелчке правой кнопкой мыши по папке в проводнике Windows → свойства.
Вы можете просто рекурсивно складывать размеры (это командный файл):
@echo off
set size=0
for /r %%x in (folder\*) do set /a size+=%%~zx
echo %size% Bytes
Однако это имеет несколько проблем, поскольку cmd
ограничивается 32-битной целочисленной арифметикой со знаком. Таким образом, он получит размер более 2 ГиБ неправильно 1 . Кроме того, он, скорее всего, будет подсчитывать символические ссылки и переходы несколько раз, так что в лучшем случае это верхняя граница, а не истинный размер (хотя у вас возникнет проблема с любым инструментом).
Альтернативой является PowerShell:
Get-ChildItem -Recurse | Measure-Object -Sum Length
или короче:
ls -r | measure -sum Length
Если хочешь красивее:
switch((ls -r|measure -sum Length).Sum) {
{$_ -gt 1GB} {
'{0:0.0} GiB' -f ($_/1GB)
break
}
{$_ -gt 1MB} {
'{0:0.0} MiB' -f ($_/1MB)
break
}
{$_ -gt 1KB} {
'{0:0.0} KiB' -f ($_/1KB)
break
}
default { "$_ bytes" }
}
Вы можете использовать это прямо из cmd
:
powershell -noprofile -command "ls -r|measure -sum Length"
1 У меня есть где-то в пакетных файлах частично законченная библиотека bignum, которая, по крайней мере, получает правильное целочисленное сложение произвольной точности. Думаю, мне стоит выпустить его :-)
du
указывается размер каталога, но все, что он делает, - это обход дерева и подведение итогов. То, что можно очень элегантно выразить в конвейере, как здесь :-). Поэтому для PowerShell я обычно ищу, как можно разложить цель высокого уровня на подходящие операции более низкого уровня.folder\*
у меня не работает размер папки, которую я поместил на место, показывает 0 байт. Есть ли какое-нибудь решение?Для этого есть встроенный инструмент Windows :
Это напечатает много ненужной информации, но в конечном итоге размер папки будет таким:
Если вам нужно включить скрытые папки, добавьте
/a
.источник
Я предлагаю скачать утилиту DU из пакета Sysinternals Suite, предоставленного Microsoft, по этой ссылке http://technet.microsoft.com/en-us/sysinternals/bb896651
Пока вы это делаете, взгляните на другие утилиты. Они спасают жизнь каждому Windows Professional.
источник
\\live.sysinternals.com
если она все еще существует). Я полностью согласен с тем, что все инструменты sysinternals должны быть включены по умолчанию. Хотя для многих применений PowerShell - вполне достойная замена.Один лайнер:
То же самое, но только Powershell:
Это должно привести к следующему результату:
источник
0.00 C:\Windows
Могу ли я оптимизировать это для всех папок, пробовал уже запускать от имени администратораft
(Format-Table
). Вы можете попробоватьfl
вместо этого (Format-List
)Если на вашем компьютере установлен git (становится все чаще и чаще), просто откройте MINGW32 и введите:
du folder
источник
du -h -d 1 folder | sort -h
если хотите, чтобы размер был удобочитаемым, только один уровень подкаталогов и сортировка по размеру.Рекомендую использовать утилиту https://github.com/aleksaan/diskusage . Очень просто и полезно. И очень быстро.
Просто введите командную оболочку
и получить список папок, упорядоченных по размеру
Этот пример был выполнен на жестком диске при 272 мсек .
Вы можете увеличить глубину вложенных папок для анализа, например:
и получать размеры не только для выбранных папок, но и для их подпапок
* 3.5 Тб на сервере просканировано 3 мин. 12 сек.
источник
Вот код PowerShell, который я пишу, чтобы указать размер списка и количество файлов для всех папок в текущем каталоге. Не стесняйтесь использовать повторно или изменять в соответствии с вашими потребностями.
источник
$FolderList = Get-ChildItem -Directory -Force; $data = foreach ($folder in $FolderList) { set-location $folder.FullName; $size = Get-ChildItem -Recurse -Force | Measure-Object -Sum Length; $size | select @{n="Path"; e={$folder.Fullname}}, @{n="FileCount"; e={$_.count}}, @{n="Size"; e={$_.Sum}} }
это предоставит объекты (больше Powershell-ish), FileCount и Size - целые числа (чтобы вы могли обработать их позже, если это необходимо), а Size - в байтах, но вы можете легко преобразовать его в ГБ (или желаемое устройство) с расширением$Data.Size / 1GB
.$Data = dir -Directory -Force | %{ $CurrentPath = $_.FullName; Get-ChildItem $CurrentPath -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Sum Length | select @{n="Path"; e={$CurrentPath}}, @{n="FileCount"; e={$_.count}}, @{n="Size"; e={$_.Sum}} }
Этот код протестирован. Вы можете проверить это еще раз.
источник
Я предполагаю, что это сработает только в том случае, если каталог достаточно статичен и его содержимое не меняется между выполнением двух команд dir. Возможно, это способ объединить это в одну команду, чтобы этого избежать, но это сработало для моей цели (мне не нужен был полный список; просто резюме).
GetDirSummary.bat Скрипт:
Использование:
GetDirSummary.bat c: \ temp
Вывод:
источник
Получил
du.exe
с моим дистрибутивом git. Другим местом может быть вышеупомянутый Microsoft или Unxutils .Как только на вашем пути окажется файл du.exe. Вот твой
fileSizes.bat
:-)➪
источник
Я думаю, что вашим единственным вариантом будет diruse (стороннее решение с высокой поддержкой):
Получить размер файла / каталога из командной строки
К сожалению, интерфейс командной строки Windows довольно ограничен, в качестве альтернативы вы можете установить Cygwin, который является мечтой по сравнению с cmd. Это даст вам доступ к перенесенному Unix-инструменту du, который является основой diruse в Windows.
Извините, я не смог напрямую ответить на ваши вопросы с помощью команды, которую вы можете запустить на собственном клиенте.
источник
du
Cygwin - это слишком. Просто используйте GnuWin32 .:: Получить количество строк, возвращаемых командами Dir (/ -c, чтобы исключить разделители чисел:.,) ["Tokens = 3", чтобы просмотреть только третий столбец каждой строки в Dir]
FOR /F "tokens=3" %%a IN ('dir /-c "%folderpath%"') DO set /a i=!i!+1
Номер предпоследней строки, где - количество байтов суммы файлов:
Наконец, получаем количество байтов в предпоследней строке - 3-м столбце:
Поскольку он не использует поиск слов, у него не будет языковых проблем.
Ограничения:
источник
Пытаться:
Измените C: \ Program Files на любую папку, которую вы хотите, и измените% A на %% A при использовании в пакетном файле
Он возвращает размер всей папки, включая подпапки, скрытые и системные файлы, и работает с папками размером более 2 ГБ.
Он записывает на экран, поэтому вам придется использовать промежуточный файл, если вы этого не хотите.
источник
Следующий скрипт можно использовать для получения и накопления размера каждого файла в данной папке.
Путь к папке
%folder%
может быть указан в качестве аргумента этого скрипта (%1
).В конечном итоге результаты хранятся в параметре
%filesize%
Примечание. Метод
calcAccSize
также может распечатать содержимое папки (с комментариями в примере выше).источник
Итак, вот решение для обоих ваших запросов в том виде, в котором вы изначально просили. Это обеспечит удобочитаемость файла без ограничений, с которыми все сталкиваются. Совместимость с Win Vista или новее. XP доступен, только если установлен Robocopy. Просто перетащите папку в этот командный файл или используйте лучший метод, упомянутый ниже.
Чтобы использовать этот командный файл, поместите его в папку SendTo. Это позволит вам щелкнуть правой кнопкой мыши папку или набор папок, выбрать параметр «Отправить», а затем выбрать этот командный файл.
Чтобы найти папку SendTo на вашем компьютере, самый простой способ - открыть cmd, а затем скопировать эту строку как есть.
источник
Решил аналогичную проблему. Некоторые методы на этой странице медленные, а некоторые проблематичные в многоязычной среде (все предполагают английский). Я нашел простой обходной путь, используя vbscript в cmd. Проверено в W2012R2 и W7.
Он устанавливает переменную окружения S_. Вы, конечно, можете изменить последнюю строку, чтобы напрямую отображать результат, например,
Вы можете использовать его как подпрограмму или как отдельный cmd. Параметр - это имя тестируемой папки, заключенное в кавычки.
источник
Самый простой способ получить только общий размер - это PowerShell, но он все же ограничен тем, что пути длиной более 260 символов не включаются в общий размер.
источник