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 라이브러리가 있습니다. 나는 그것을 정말로 풀어 놓아야한다, 나는 추측한다 🙂
답변
이를위한 기본 제공 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
}