Как я могу проверить размер папки из командной строки Windows?

36

Я хочу использовать командную строку Windows, чтобы рассчитать размер всех файлов в папке и подпапке. Обычно я делаю это, щелкая правой кнопкой мыши по папке и выбирая «Свойства», но я хочу сделать это в командной строке.

Какую команду я могу использовать?

user1605665
источник

Ответы:

33

Вы захотите использовать его dir /a/sтак, чтобы он включал каждый файл, включая системные и скрытые файлы. Это даст вам общий размер, который вы хотите.

RockPaperLizard
источник
Покажите мне, как вывод вашей команды дает мне общий размер каталога. Отредактируйте свой ответ, чтобы включить его. Я удалю свои комментарии и откажусь от голосования.
КГВР
2
@ user1167442 Вы явно не пробовали. Вывод включает в себя точно такой же размер, который дает вам свойства проводника.
DavidPostill
1
@DavidPostill - вы правы. Мне стыдно стыдно. Я буду отменять понижательный голос. Тем не менее, я все еще не слишком заинтересован в этом решении - я бы предпочел что-то немного быстрее, которое не требует вывода всех других вещей, но оно работает. Я ошибся - Ах, чокнутый - это не поможет, я не смогу изменить свое мнение. Как только я получу репутацию, я переверну ее.
КГВР
1
Это сработало - удалено голосование -)
dgo
1
@QHarr Да, давай, оставь вопрос, и я напишу тебе ответ. Таким образом, это поможет всем, будучи доступным для поиска для всех, чтобы найти.
RockPaperLizard
13

Вы можете использовать PowerShell!

$totalsize = [long]0
Get-ChildItem -File -Recurse -Force -ErrorAction SilentlyContinue | % {$totalsize += $_.Length}
$totalsize

Это повторяется по всему текущему каталогу (игнорируя каталоги, которые нельзя ввести) и суммирует размеры каждого файла. Затем он печатает общий размер в байтах.

Уплотненный однострочный:

$totalsize=[long]0;gci -File -r -fo -ea Silent|%{$totalsize+=$_.Length};$totalsize

На моей машине это выглядит немного быстрее, чем a dir /s /a, поскольку он не выводит информацию о каждом объекте на экран.

Чтобы запустить его из обычной командной строки:

powershell -command "$totalsize=[long]0;gci -File -r -fo -ea Silent|%{$totalsize+=$_.Length};$totalsize"
Бен Н
источник
Я хотел бы провести больше времени с PowerShell. Мне просто никогда не нравится использовать его по какой-то причине - хотя это очень полезно для многих вещей
dgo
Отличное решение - очень быстро тоже!
TrojanName
7

Нет такой команды, встроенной в командную строку DOS или Windows. В Linux есть команда du( D isk U sage).

Линейка инструментов Microsoft Sysinternals имеет инструмент, который примерно эквивалентен инструментам duLinux. Это также называется du. ;)

Даниэль Б
источник
1
du -sh <directory>мой переход на Linux (или Windows W / Du через Git), чтобы показать удобочитаемую сводку размера каталога.
Кавун
Спасибо, это именно то, что мне было нужно. По мере того, как диски становятся больше, требуется больше и больше времени, чтобы щелкнуть правой кнопкой мыши свойства, чтобы получить размеры файлов, и результат не может быть выбран и скопирован в calc, чтобы гарантировать, что разделение на несколько внешних дисков записало каждый файл в исходной папке. Я поместил это в конце пакета robocopy, переданного по трубопроводу в текстовый файл, затем, когда пакет заканчивается, у меня есть общая метрика файла / папки / размера, которую можно скопировать / вставить в calc, чтобы гарантировать, что файлы и байты являются так же, как источник.
Майкл Стимсон
2

Размер папки можно рассчитать с помощью следующего пакетного сценария:

@echo off
setlocal enabledelayedexpansion

set size=0
for /f "tokens=*" %%x in ('dir /s /a /b %1') do set /a size+=%%~zx
echo.!size!

endlocal
no73
источник
Как запустить это на Windows 7?
klm123
это не будет работать, если общий размер превышает 2 ГБ из-за ограничения арифметики в cmd
phuclv
... что в наши дни является довольно серьезным ограничением!
rossmcm
2

Вы все еще можете использовать утилиту командной строки diruse.exeиз Windows 2000 Resource Kit, доступной здесь:

https://support.microsoft.com/en-us/kb/927229

Работает на Windows 8.1 без проблем.

RockHead
источник
Хорошая находка, не могли бы вы добавить пример использования?
Бурги,
1

dir /s Перечислит размеры всех файлов и файлов во всех подпапках

Keltari
источник
1

Я понимаю, что этот вопрос задан для анализа размера файла с помощью CMD line. Но если вы открыты для использования, PowerQuery (Excel add-in, versions 2010+)вы можете провести довольно убедительный анализ размера файла.

Сценарий ниже может быть вставлен в пустой запрос; Единственное, что вам нужно сделать, это добавить параметр с именем «paramRootFolderSearch», а затем добавить свое значение, например «C: \ Users \ bl0040 \ Dropbox \». Я использовал это в качестве руководства: MSSQLTips: Получить размеры файлов из файловой системы с помощью Power Query .

Этот запрос предоставил мне данные для создания сводной таблицы ( [Folder Root]> [Folder Parent (1-2)], [Name]), и я смог определить несколько файлов, которые я мог удалить, что освободило много места в моем каталоге.

Вот скрипт M для PowerQuery :

let
// Parmameters:
    valueRootFolderSearch = paramRootFolderSearch,
    lenRootFolderSearch = Text.Length(paramRootFolderSearch),
//

    Source = Folder.Files(paramRootFolderSearch),
    #"Removed Other Columns" = Table.RenameColumns(
Table.SelectColumns(Source,{"Name", "Folder Path", "Attributes"})
,{{"Folder Path", "Folder Path Full"}}),
    #"Expanded Attributes" = Table.ExpandRecordColumn(#"Removed Other Columns", "Attributes", {"Content Type", "Kind", "Size"}, {"Content Type", "Kind", "Size"}),
    #"fx_Size(KB)" = Table.AddColumn(#"Expanded Attributes", "Size(KB)", each [Size]/1024),
    #"fx_Size(MB)" = Table.AddColumn(#"fx_Size(KB)", "Size(MB)", each [Size]/1048576),
    #"fx_Size(GB)" = Table.AddColumn(#"fx_Size(MB)", "Size(GB)", each [Size]/1073741824),
    fx_FolderRoot = Table.AddColumn(#"fx_Size(GB)", "Folder Root", each valueRootFolderSearch),
    helper_LenFolderPathFull = Table.AddColumn(fx_FolderRoot, "LenFolderPathFull", each Text.Length([Folder Path Full])),
    fx_FolderDepth = Table.AddColumn(helper_LenFolderPathFull, "Folder Depth", each Text.End([Folder Path Full], [LenFolderPathFull]-lenRootFolderSearch+1)),
    #"helperList_ListFoldersDepth-Top2" = Table.AddColumn(fx_FolderDepth, "tmp_ListFoldersDepth", each List.Skip(
  List.FirstN(
    List.RemoveNulls(
      Text.Split([Folder Depth],"\")
    )
  ,3)
,1)),
    #"ListFoldersDepth-Top2" = Table.TransformColumns(#"helperList_ListFoldersDepth-Top2", 
{"tmp_ListFoldersDepth", each "\" & Text.Combine(List.Transform(_, Text.From), "\") & "\"
, type text}),
    #"Select Needed Columns" = Table.SelectColumns(#"ListFoldersDepth-Top2",{"Name", "Folder Root", "Folder Depth", "tmp_ListFoldersDepth", "Content Type", "Kind", "Size", "Size(KB)", "Size(MB)", "Size(GB)"}),
    #"rename_FoldersParent(1-2)" = Table.RenameColumns(#"Select Needed Columns",{{"tmp_ListFoldersDepth", "Folders Parent (1-2)"}})
in
    #"rename_FoldersParent(1-2)"

Папка Файл Sizes_xlsx.png

введите описание изображения здесь

Папка Файл Sizes_xlsx2.png

введите описание изображения здесь

SherlockSpreadsheets
источник
0

Просто откройте Power Shell и du -sh <directory>не нужно устанавливать сторонние или системные компоненты. Внутри Power-shell вы можете запускать некоторые простые Linux-подобные команды, такие как команды ls или du, некоторые из переключателей не будут работать так же, как ls -altошибка, поскольку powershell не знает, что такое -alt ...

ТЦМВ
источник
3
Какую версию PowerShell вы используете? И вы уверены, что у вас не установлены Sysinternals? Команда "du" не встроена ни в какие системы, к которым у меня есть доступ. Некоторая ссылка на документацию тоже будет полезна.
anlag
Я нахожусь на последнем быстром инсайдерском канале Windows 10, и там нет абсолютно никакой duдоступной команды
phuclv
-2

Команда «dir» предоставляет размер файла, дату последнего изменения и время текущего каталога. Сначала попробуйте перейти в каталог, который вы хотите посмотреть на размер использования cdкоманды, а затем используйте dirкоманду.

C:\>dir 

Перечисляет размер файла, дату и время последнего изменения всех файлов и каталогов в каталоге, в котором вы находитесь в данный момент, в алфавитном порядке.

vembutech
источник
3
Это тоже плохой ответ. Это выведет объединенный размер всех файлов в текущем каталоге. Однако он не будет выводить размер любых каталогов в текущем каталоге. Это просто не делает то, что просит опера.
КГВР