[windows] Windows 명령 줄에서 폴더 크기 가져 오기

Windows에서 타사 도구를 사용하지 않고 명령 줄에서 폴더 크기를 가져올 수 있습니까?

Windows 탐색기 → 속성에서 폴더를 마우스 오른쪽 버튼으로 클릭했을 때와 동일한 결과를 원합니다.



답변

재귀 적으로 크기를 추가 할 수 있습니다 (다음은 배치 파일입니다).

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

그러나 cmd32 비트 부호있는 정수 산술로 제한 되기 때문에 몇 가지 문제 가 있습니다. 그래서 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 라이브러리가 있습니다. 나는 그것을 정말로 풀어 놓아야한다, 나는 추측한다 🙂


답변

이를위한 기본 제공 Windows 도구 가 있습니다.

dir /s 'FolderName'

이렇게하면 불필요한 정보가 많이 인쇄되지만 끝은 다음과 같은 폴더 크기가됩니다.

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

숨겨진 폴더를 포함해야하는 경우 /a.


답변

이 링크 http://technet.microsoft.com/en-us/sysinternals/bb896651 에서 Microsoft에서 제공하는 Sysinternals Suite에서 유틸리티 DU를 다운로드하는 것이 좋습니다.

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

당신이 그것에있는 동안 다른 유틸리티를 살펴보십시오. 모든 Windows Professional의 생명의 은인입니다.


답변

짧막 한 농담:

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"

동일하지만 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

그러면 다음과 같은 결과가 생성됩니다.

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


답변

컴퓨터에 git이 설치되어있는 경우 (더욱 보편화 됨) MINGW32를 열고 다음을 입력하십시오. du folder


답변

https://github.com/aleksaan/diskusage 유틸리티 를 사용하는 것이 좋습니다 . 매우 간단하고 도움이됩니다. 그리고 매우 빠릅니다.

명령 셸을 입력하기 만하면됩니다.

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

크기 별로 정렬 된 폴더 목록을 가져옵니다.

  1. | DIR : d : / go | 크기 : 325.72 Mb | 깊이 : 1
  2. | DIR : d : / Books | 크기 : 14.01 Mb | 깊이 : 1

이 예제는 HDD 에서 272ms 에서 실행되었습니다 .

분석 할 하위 폴더의 깊이를 늘릴 수 있습니다. 예를 들면 다음과 같습니다.

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

선택한 폴더뿐만 아니라 하위 폴더의 크기도 가져옵니다.

  1. | DIR : d : / go | 크기 : 325.72 Mb | 깊이 : 1
  2. | 디렉터리 : d : / go / pkg | 크기 : 212.88 Mb | 깊이 : 2
  3. | DIR : d : / go / src | 크기 : 62.57 Mb | 깊이 : 2
  4. | DIR : d : / go / bin | 크기 : 30.44 Mb | 깊이 : 2
  5. | DIR : d : / 책 / 체스 | 크기 : 14.01 Mb | 깊이 : 2
  6. | DIR : d : / Books | 크기 : 14.01 Mb | 깊이 : 1
  7. | DIR : d : / go / api | 크기 : 6.41 Mb | 깊이 : 2
  8. | DIR : d : / go / test | 크기 : 5.11 Mb | 깊이 : 2
  9. | DIR : d : / go / doc | 크기 : 4.00 Mb | 깊이 : 2
 10. | DIR : d : / go / misc | 크기 : 3.82 Mb | 깊이 : 2
 11. | 디렉터리 : d : / go / lib | 크기 : 358.25 Kb | 깊이 : 2

* 서버의 3.5Tb는 3 분 12 초 동안 스캔되었습니다.


답변

다음은 현재 디렉토리 아래의 모든 폴더에 대한 목록 크기와 파일 수를 작성하는 powershell 코드입니다. 필요에 따라 자유롭게 재사용하거나 수정할 수 있습니다.

$FolderList = Get-ChildItem -Directory
foreach ($folder in $FolderList)
{
    set-location $folder.FullName
    $size = Get-ChildItem -Recurse | Measure-Object -Sum Length
    $info = $folder.FullName + "    FileCount: " + $size.Count.ToString() + "   Size: " + [math]::Round(($size.Sum / 1GB),4).ToString() + " GB"
    write-host $info
}