Pobierz rozmiar folderu z wiersza poleceń systemu Windows

Czy w systemie Windows możliwe jest pobranie rozmiaru folderu z linii poleceń bez użycia narzędzi innych firm?

Chcę taki sam wynik, jak po kliknięciu prawym przyciskiem myszy folderu w Eksploratorze Windows → właściwości.

Author: Justin Krejcha, 2012-10-10

14 answers

Możesz po prostu dodać rozmiary rekurencyjnie (poniżej znajduje się plik wsadowy):

@echo off
set size=0
for /r %%x in (folder\*) do set /a size+=%%~zx
echo %size% Bytes

Ma to jednak kilka problemów, ponieważ cmd jest ograniczona do 32-bitowej arytmetyki całkowitej. Więc dostanie rozmiary powyżej 2 GiB źle1. Co więcej, prawdopodobnie będzie liczyć dowiązania symboliczne i skrzyżowania wiele razy, więc w najlepszym razie jest to górna granica, a nie prawdziwy rozmiar(będziesz miał ten problem z dowolnym narzędziem).

Alternatywą jest PowerShell:
Get-ChildItem -Recurse | Measure-Object -Sum Length

Lub krótszy: {]}

ls -r | measure -s Length

Jeśli chcesz, żeby było ładniej:

switch((ls -r|measure -s 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" }
}

Możesz użyć tego bezpośrednio z cmd:

powershell -noprofile -command "ls -r|measure -s Length"

1 mam gdzieś częściowo skończoną bibliotekę bignum w plikach wsadowych, która przynajmniej dostaje poprawne dodawanie liczb całkowitych o arbitralnej precyzji. Chyba powinienem to wypuścić: -)

 82
Author: Joey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-09 15:57:20

Istnieje wbudowane narzędzie Windows do tego:

dir /s 'FolderName'

To wydrukuje wiele niepotrzebnych informacji, ale koniec będzie taki rozmiar folderu:

 Total Files Listed:
       12468 File(s)    182,236,556 bytes

Jeśli chcesz dołączyć ukryte foldery dodaj /a.

 75
Author: Andro Secy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-22 12:39:45

Proponuję pobrać utility DU z pakietu Sysinternals dostarczonego przez Microsoft pod tym linkiem http://technet.microsoft.com/en-us/sysinternals/bb896651

usage: du [-c] [-l <levels> | -n | -v] [-u] [-q] <directory>
   -c     Print output as CSV.
   -l     Specify subdirectory depth of information (default is all levels).
   -n     Do not recurse.
   -q     Quiet (no banner).
   -u     Count each instance of a hardlinked file.
   -v     Show size (in KB) of intermediate directories.


C:\SysInternals>du -n d:\temp

Du v1.4 - report directory disk usage
Copyright (C) 2005-2011 Mark Russinovich
Sysinternals - www.sysinternals.com

Files:        26
Directories:  14
Size:         28.873.005 bytes
Size on disk: 29.024.256 bytes

Gdy już nad tym pracujesz, spójrz na inne narzędzia. Są one oszczędzające życie dla każdego profesjonalisty Windows

 55
Author: Steve,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-10 07:16:29

Oneliner:

powershell -command "$fso = new-object -com Scripting.FileSystemObject; gci -Directory | select @{l='Size'; e={$fso.GetFolder($_.FullName).Size}},FullName | sort Size -Descending | ft @{l='Size [MB]'; e={'{0:N2}    ' -f ($_.Size / 1MB)}},FullName"

To samo, ale tylko Powershell:

$fso = new-object -com Scripting.FileSystemObject
gci -Directory `
  | select @{l='Size'; e={$fso.GetFolder($_.FullName).Size}},FullName `
  | sort Size -Descending `
  | ft @{l='Size [MB]'; e={'{0:N2}    ' -f ($_.Size / 1MB)}},FullName

Powinno to dać następujący wynik:

Size [MB]  FullName
---------  --------
580,08     C:\my\Tools\mongo
434,65     C:\my\Tools\Cmder
421,64     C:\my\Tools\mingw64
247,10     C:\my\Tools\dotnet-rc4
218,12     C:\my\Tools\ResharperCLT
200,44     C:\my\Tools\git
156,07     C:\my\Tools\dotnet
140,67     C:\my\Tools\vscode
97,33      C:\my\Tools\apache-jmeter-3.1
54,39      C:\my\Tools\mongoadmin
47,89      C:\my\Tools\Python27
35,22      C:\my\Tools\robomongo
 13
Author: frizik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-19 21:09:48

Jeśli masz zainstalowany git w swoim komputerze (coraz częściej) po prostu otwórz MINGW32 i wpisz: du folder

 6
Author: Custodio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-08 14:02:54

Ten kod jest testowany. Możesz to sprawdzić jeszcze raz.

@ECHO OFF
CLS
SETLOCAL
::Get a number of lines contain "File(s)" to a mytmp file in TEMP location.
DIR /S /-C | FIND "bytes" | FIND /V "free" | FIND /C "File(s)" >%TEMP%\mytmp
SET /P nline=<%TEMP%\mytmp
SET nline=[%nline%]
::-------------------------------------
DIR /S /-C | FIND "bytes" | FIND /V "free" | FIND /N "File(s)" | FIND "%nline%" >%TEMP%\mytmp1
SET /P mainline=<%TEMP%\mytmp1
CALL SET size=%mainline:~29,15%
ECHO %size%
ENDLOCAL
PAUSE
 2
Author: Chienvela,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-10 14:37:01

Myślę, że to zadziała tylko wtedy, gdy katalog jest dość statyczny i jego zawartość nie zmienia się pomiędzy wykonaniem dwóch poleceń dir. Może sposób, aby połączyć to w jedną komendę, aby tego uniknąć, ale to działało na mój cel(nie chciałem pełnej listy; tylko podsumowanie).

GetDirSummary.skrypt bat:
@echo off
rem  get total number of lines from dir output
FOR /F "delims=" %%i IN ('dir /S %1 ^| find "asdfasdfasdf" /C /V') DO set lineCount=%%i
rem  dir summary is always last 3 lines; calculate starting line of summary info
set /a summaryStart="lineCount-3"
rem  now output just the last 3 lines
dir /S %1 | more +%summaryStart%

Użycie:

GetDirSummary.bat c:\temp

Wyjście:

 Total Files Listed:
          22 File(s)         63,600 bytes
           8 Dir(s)  104,350,330,880 bytes free
 2
Author: Steve,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-06 19:46:14

Zalecam użycie https://github.com/aleksaan/diskusage użyteczność. Bardzo prosty i pomocny. I bardzo szybko.

Wystarczy wpisać w powłoce poleceń

diskusage.exe -path 'd:/go; d:/Books'

I pobierz listę folderów ułożonych według rozmiaru

  1.| DIR: d:/go      | SIZE: 325.72 Mb   | DEPTH: 1 
  2.| DIR: d:/Books   | SIZE:  14.01 Mb   | DEPTH: 1 

Ten przykład został wykonany w 272ms na dysku twardym.

Możesz zwiększyć głębokość podfolderów do analizy, na przykład:

diskusage.exe -path 'd:/go; d:/Books' -depth 2

I uzyskać rozmiary nie tylko dla wybranych folderów, ale także dla jego podfolderów

  1.| DIR: d:/go            | SIZE: 325.72 Mb   | DEPTH: 1 
  2.| DIR: d:/go/pkg        | SIZE: 212.88 Mb   | DEPTH: 2 
  3.| DIR: d:/go/src        | SIZE:  62.57 Mb   | DEPTH: 2 
  4.| DIR: d:/go/bin        | SIZE:  30.44 Mb   | DEPTH: 2 
  5.| DIR: d:/Books/Chess   | SIZE:  14.01 Mb   | DEPTH: 2 
  6.| DIR: d:/Books         | SIZE:  14.01 Mb   | DEPTH: 1 
  7.| DIR: d:/go/api        | SIZE:   6.41 Mb   | DEPTH: 2 
  8.| DIR: d:/go/test       | SIZE:   5.11 Mb   | DEPTH: 2 
  9.| DIR: d:/go/doc        | SIZE:   4.00 Mb   | DEPTH: 2 
 10.| DIR: d:/go/misc       | SIZE:   3.82 Mb   | DEPTH: 2 
 11.| DIR: d:/go/lib        | SIZE: 358.25 Kb   | DEPTH: 2 

* 3,5 Tb na serwerze zostało przeskanowane dla 3m12s

 2
Author: Alexander Anufriev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-10 11:43:39

Mam du.exe z moją dystrybucją Gita. Innym miejscem może być wspomniany Microsoft lub Unxutils .

Raz masz du.exe na twojej drodze. Oto twoja fileSizes.bat :-)

@echo ___________
@echo DIRECTORIES
@for /D %%i in (*) do @CALL du.exe -hs "%%i"
@echo _____
@echo FILES
@for %%i in (*) do @CALL du.exe -hs "%%i"
@echo _____
@echo TOTAL
@du.exe -sh "%CD%"

___________
DIRECTORIES
37M     Alps-images
12M     testfolder
_____
FILES
765K    Dobbiaco.jpg
1.0K    testfile.txt
_____
TOTAL
58M    D:\pictures\sample
 1
Author: Frank Nocke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-24 17:13:28

Myślę, że jedyną opcją będzie diruse (wysoce wspierane rozwiązanie 3rd party):

Get file / directory size from command line

Windows CLI jest niestety dość restrykcyjny, można alternatywnie zainstalowaćCygwin , który jest marzeniem w porównaniu do cmd. To dałoby ci dostęp do przeportowanego Unixowego narzędzia du, które jest podstawą diruse w systemie windows.

Przepraszam, że nie byłem w stanie odpowiedzieć na twoje pytania bezpośrednio z polecenia można uruchomić na native cli.

 1
Author: Illizian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-07 09:14:51

Try:

SET FOLDERSIZE=0
FOR /F "tokens=3" %A IN ('DIR "C:\Program Files" /a /-c /s ^| FINDSTR /C:" bytes" ^| FINDSTR /V /C:" bytes free"') DO SET FOLDERSIZE=%A

Zmień C:\Program pliki do dowolnego folderu i zmień %A na %%a, jeśli używasz w pliku wsadowym

Zwraca Rozmiar całego folderu, w tym podfolderów i plików ukrytych i systemowych, i działa z folderami powyżej 2GB

Zapisuje na ekranie, więc będziesz musiał użyć tymczasowego pliku, jeśli tego nie chcesz.

 1
Author: FrinkTheBrave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-14 08:47:28

Rozwiązałem podobny problem. Niektóre metody na tej stronie są powolne, a niektóre są problematyczne w środowisku wielojęzycznym (wszystkie przypuśćmy angielski). Znalazłem proste obejście przy użyciu vbscript w cmd. Jest testowany w W2012R2 i W7.

>%TEMP%\_SFSTMP$.VBS ECHO/Set objFSO = CreateObject("Scripting.FileSystemObject"):Set objFolder = objFSO.GetFolder(%1):WScript.Echo objFolder.Size
FOR /F %%? IN ('CSCRIPT //NOLOGO %TEMP%\_SFSTMP$.VBS') DO (SET "S_=%%?"&&(DEL %TEMP%\_SFSTMP$.VBS))

Ustawia zmienną środowiskową S_. Możesz oczywiście zmienić ostatnią linię, aby bezpośrednio wyświetlić wynik na np.

FOR /F %%? IN ('CSCRIPT //NOLOGO %TEMP%\_SFSTMP$.VBS') DO (ECHO "Size of %1 is %%?"&&(DEL %TEMP%\_SFSTMP$.VBS))

Można go używać jako podprogramu lub jako samodzielnego cmd. Parametr jest nazwą testowanego folderu zamkniętego w cudzysłowie.

 0
Author: arpi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-19 13:49:10

::pobiera liczbę linii zwracanych przez polecenia Dir (/-c, aby wyeliminować separatory liczb: . ,) ["Tokens = 3", aby spojrzeć tylko na trzecią kolumnę każdej linii w katalogu]

FOR /F "tokens=3" %%a IN ('dir /-c "%folderpath%"') DO set /a i=!i!+1

Liczba przedostatniej linii, gdzie jest liczbą bajtów sumy plików:

set /a line=%i%-1

Na koniec uzyskaj liczbę bajtów w przedostatniej linii - 3. kolumna:

set i=0
FOR /F "tokens=3" %%a IN ('dir /-c "%folderpath%"') DO (
  set /a i=!i!+1
  set bytes=%%a
  If !i!==%line% goto :size  
)
:size
echo %bytes%

Ponieważ nie używa wyszukiwania słów, nie ma języka problemy.

Ograniczenia:

  • Działa tylko z folderami o pojemności mniejszej niż 2 GB (cmd nie obsługuje numerów większych niż 32 bity)
  • nie odczytuje liczby bajtów folderów wewnętrznych.
 0
Author: Gustavo Davico,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-02 14:08:51

Najprostszą metodą, aby uzyskać tylko całkowity rozmiar, jest powershell, ale nadal jest ograniczony faktem, że nazwy ścieżek dłuższe niż 260 znaków nie są zawarte w sumie

 -2
Author: ray,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-02 19:29:19