Команда Windows Dir - подреди поддиректории по размер

Как мога да покажа поддиректориите на папка от най-голямата към най-малката с помощта на командата dir?

Опитах да използвам командата dir /O:-S и въпреки че сортира добре файловете, изглежда не подрежда поддиректориите.

В идеалния случай командата трябва да може да слиза на няколко нива; някои от тези подпапки имат свои собствени папки. Например:

D:/
|-- Folder 1
    |-- Subfolder 1
    +-- Subfolder 2
        |--Another folder
+-- Folder 2

Да предположим, че общият размер на папка 1 (включително всички файлове в нейните подпапки) е 10 GB, а този на папка 2 е 15 GB, как да изведа техния ред, сортиран по общия размер на съдържанието?

I.e.

94932485 Folder 2
6453445  Folder 1

Благодаря предварително!


person Julian Laval    schedule 18.08.2013    source източник


Отговори (5)


Това изглежда работи за променените изисквания: променете c:\folder на нивото на папката, което искате да направите заявка.

@echo off
pushd "c:\folder"
for /f "delims=" %%a in (' dir /ad /b ') do call :size "%%~fa"
sort /r < "%temp%\dirsize.tmp"
del "%temp%\dirsize.tmp"
popd
pause
goto :eof

:size
for /f "tokens=3" %%b in ('dir /s "%~1" 2^>nul ^|find " File(s) "') do set "n=%%b"
set dirsize=%n%
REM set dirsize=%dirsize:,=%
set dirsize=                 %dirsize%
set dirsize=%dirsize:~-18%
>>"%temp%\dirsize.tmp" echo %dirsize% "%~1"
person foxidrive    schedule 21.08.2013
comment
Благодаря! Няколко въпроса: 1) Как мога да получа размера в байтове? Приближението GB беше ненужно, исках да го използвам като пример за файловата структура, която търсех. 2) Докато изпълнявах горния код, забелязах, че папките, които всъщност бяха MB, се показват като GB (напр. 659MB се показват като 659GB). Просто нещо, което смятах, че си струва да се отбележи. - person Julian Laval; 24.08.2013
comment
Да, беше подправено. Редактирах го, за да отчита байтове и ако искате да премахнете запетаите, премахнете REM в началото на реда. - person foxidrive; 24.08.2013

Ако търсите едноредово решение, което поддържа до 999 терабайта:

cmd /v /c "set zeropad=000,000,000,000,000,&for /f "delims=" %a in ('dir /ad /b') do @set bytes=!zeropad!000&(for /f "tokens=3" %b in ('dir /s "%a" 2^>NUL ^| find "File(s)"') do @set bytes=%b)& @for /f "tokens=1* delims=," %c in ('echo !bytes!') do @(set bytes=%c&@set bytes=000!bytes!&@set bytes=!bytes:~-3!& @set bytes=!zeropad!!bytes!&if "%d" NEQ "" set bytes=!bytes!,%d) & @echo !bytes:~-23! %a" | sort /R

И бонус едноредово решение, ако искате и файлове, и директории

cmd /v /c "set zeropad=000,000,000,000,000,&for /f "tokens=4* delims= " %a in ('dir ^| find "/" ^| findstr /E /V /R "DIR^>[ ][ ]*\.\.$ DIR^>[ ][ ]*\.$"') do @set bytes=!zeropad!000&(if "%a" EQU "^<DIR^>" (for /f "tokens=3" %c in ('dir /s "%b" 2^>NUL ^| find "File(s)"') do @set bytes=%c)) & (if "%a" NEQ "^<DIR^>" (set bytes=%a)) & (for /f "tokens=1* delims=," %d in ('echo !bytes!') do @set bytes=%d&@set bytes=000!bytes!&@set bytes=!bytes:~-3!& @set bytes=!zeropad!!bytes!&if "%e" NEQ "" set bytes=!bytes!,%e)& echo !bytes:~-23! %b" | sort /R
person sparks    schedule 10.09.2018
comment
Перфектно едноредово решение! - person Kavinda Jayakody; 26.03.2020

РЕДАКТИРАНО: за показване на най-големите към най-малките папки

Вижте дали това е, което ви трябва. d:\files е целевото дърво тук.

@echo off
for /f "delims=" %%a in (' dir "d:\files" /ad /b /s ') do call :size "%%a"
sort /r < "dirsize.tmp"
del "dirsize.tmp"
popd
pause
goto :eof

:size
for /f "tokens=3" %%b in ('dir "%~1" 2^>nul ^|find " File(s) "') do (
for /f "tokens=1-4 delims=," %%c in ("%%b") do (
set dirsize=%%c%%d%%e%%f
)
)
set dirsize=                    %dirsize%
set dirsize=%dirsize:~-20%
>>"dirsize.tmp" echo %dirsize% "%~1"

Това е пример за това, което получавам от него:

        27982878 "d:\images\+ Funny and Odd pictures"
        22595308 "d:\images\+ Mostly Cats\20120917"
        16723196 "d:\images\+ Mostly Cats\20130215"
        10212204 "d:\images\+ Mostly Cats\20121104"
         9177080 "d:\images\+ Mostly Cats\20130506"
         8992465 "d:\images\+ Mostly Cats\20130814"
         8488502 "d:\images\Misc\Good Ideas"
         6985671 "d:\images\Misc\50 Life Hacks"
         5515548 "d:\images\Misc\Photos That Will Make Your Stomach Drop"
         2541431 "d:\images\Misc\Sci Fi"
         2113294 "d:\images\+ Mostly Cats\20130524"
          384100 "d:\images\Astronomy pics\3D"
               0 "d:\images\Misc"
               0 "d:\images\Astronomy pics"
               0 "d:\images\+ Mostly Cats"
person foxidrive    schedule 19.08.2013
comment
Получавам грешката %%a was unexpected at this time. По същия начин за другите променливи. Някакви идеи? - person Julian Laval; 19.08.2013
comment
Как го управлявахте? Какво поставихте на мястото на d:\files? Тук работи. Подозирам, че сте го поставили в cmd подкана - но това е пакетен файл. - person foxidrive; 19.08.2013
comment
А, наистина трябваше да го стартирам като пакетен файл! Въпреки това изглежда все още не подрежда подпапките по размер... - person Julian Laval; 19.08.2013
comment
О, да, прочетох въпроса ви твърде бързо. Опитайте моя редактиран код. - person foxidrive; 20.08.2013
comment
Модифицираният код изглежда не решава проблема. Ревизирах въпроса си, за да се обясня по-добре. Благодаря ви безкрайно за помощта! - person Julian Laval; 21.08.2013
comment
Проблемът ли е, че искате да са посочени само размери GB? Вижте моята редакция по-горе за това, което виждам, когато го използвам на моето устройство. Това твърде различно ли е от това, от което се нуждаете? Редактиране: Мисля, че искате общи суми за всяка папка с подпапки, а не само самата папка. Искате ли суми само на едно ниво на папка? Посочихте folder 1 и пренебрегнахте Subfolder 1 например. - person foxidrive; 21.08.2013
comment
Другият ви отговор върши работата перфектно! Благодаря ти много! - person Julian Laval; 24.08.2013

Това е доста стар въпрос, но не знам защо всичките ми приятели отговарят, че няма такава команда. Ето командата:

директория /o:s

Видях коментари, че не работи върху папки, поради същата причина, поради която редактирам отговора си. Тази команда поддържа и папки.

Изпълних тази команда на моята локална машина в една папка и по-долу се извежда

d:\Moody>dir /o:s
 Volume in drive D is Data
 Volume Serial Number is CE51-A3E6

 Directory of d:\Moody

28-Jun-2016  11:22 AM    <DIR>          .
28-Jun-2016  11:22 AM    <DIR>          ..
01-Jun-2016  05:37 PM    <DIR>          binding
05-May-2016  06:29 PM    <DIR>          WMQ 8 JARS
27-Jun-2016  06:51 PM    <DIR>          codebase
27-Jun-2016  05:34 PM    <DIR>          docs
21-Jun-2016  11:12 AM    <DIR>          WMQ 7.5 JARS
18-May-2016  12:56 PM    <DIR>          TestValidation
17-Jun-2016  02:35 PM    <DIR>          java-doc-jms
17-May-2016  04:20 PM    <DIR>          sample-log
20-May-2016  03:28 PM    <DIR>          jms
26-May-2016  12:01 PM    <DIR>          repository
24-Jun-2016  12:09 PM    <DIR>          New folder
05-Apr-2016  04:55 PM    <DIR>          zips
04-May-2016  12:20 PM    <DIR>          PocJms
20-Apr-2016  12:58 PM               901 TestValidation.zip
22-Jun-2016  04:22 PM             7,739 team.xlsx
13-May-2016  09:19 PM             8,700 sample-log.zip
04-Jun-2016  03:06 PM            43,410 Sequence diagrams.mdj
28-Jun-2016  11:22 AM            59,392 FW Binding file for DEV QM.msg
02-May-2016  08:04 PM            81,568 PocJms.zip
21-Mar-2013  01:33 PM            99,926 fscontext-4.2.jar--
22-Jun-2016  02:31 PM           236,631 java-doc-jms.zip
05-May-2016  05:19 PM         7,673,675 WMQ 7.5 JARS.zip
05-May-2016  05:19 PM        12,442,322 WMQ 8 JARS.zip
              15 File(s)     21,028,409 bytes
              19 Dir(s)  73,162,878,976 bytes free

Освен файлове, които показват размери, папките ми също са подредени. Когато проверя размера на подвързията; неговите почти 18 KB; и хранилището на последната папка е почти 1 GB. Така че работи и в папка.

person shaILU    schedule 30.10.2015
comment
Проверете това за подробности: как да се използва -dos.blogspot.in/2008/07/dos-commands-dir.html - person shaILU; 30.10.2015
comment
Това не работи за папки, а само за файлове. Приятелите ти са прави. - person katzenhut; 25.06.2016
comment
Не @katzenhut ..... проверете това. В една от командите ми dir dir /o:s дава по-долу: -----OUTPUT----- 01-Jun-2016 05:37 PM ‹DIR› обвързване ›››премахнати редове, тъй като ans стават твърде дълги 04- Май-2016 12:20 ч. ‹DIR› PocJms 26-май-2016 г. 12:01 ч. ‹DIR› хранилище 20-апр-2016 г. 12:58 ч. 901 TestValidation.zip ›››премахнати редове, тъй като ans стават твърде дълги 05-май -2016 05:19 PM 12,442,322 WMQ 8 JARS.zip -------------- Както е споменато в обвързването на изходната директория е с размер 18 KB и хранилище ~1GB, така че подрежда и поддиректория. Моля те, провери. - person shaILU; 27.06.2016
comment
@katzenhut, включено. Моля те, провери. И +1, ако се чувствате добре. - person shaILU; 28.06.2016
comment
проверих. не работи за мен. файловете са подредени, но папките не са. съдейки по въпроса, това също не работи за операционната система. нямам представа защо изглежда, че работи за вас. - person katzenhut; 28.06.2016
comment
Опитах с Win 7 Professional Service Pack 1. Това има ли значение? - person shaILU; 28.06.2016
comment
Този отговор просто показва папките по азбучен ред - което не е това, което искаше оригиналният плакат. - person Richard; 30.04.2018
comment
Richard в моята изходна папка не са подредени по азбучен ред. Можете ли да проверите и ако е добре, върнете +1 - person shaILU; 19.06.2019

Ако нямате нужда от дата и друга информация, можете да използвате:

dir /b /a-d /o:s
person Ibrahim Akbar    schedule 19.04.2017
comment
Това не показва размера на файла - person Joel; 21.01.2019