2013-07-25 1 views
3

으로 바이트 단위로 폴더의 크기를 얻으려면 어떻게하면이 얻을 :내 폴더의 크기를 확인하면 일괄

for %i in (*) do @set /a size+=%~zi 
166576251665763016658914166589201665917416659428166596821665993616660190166601951666038416660487168652871687269016872716169860941698686116986931169872071698728616987313169875941698775316987908169884331700481717005585170056001700563417005891170059181700605117007696170076961700782617021650170218471702192817022003170220911702211617022141170222091702227017022755170228501702370517023960170242831702453617024848170252511702526817578552175800371758003717580037175800371758003717580037175826531758490317591537175919931759206017592095175921301764998617650665176520351765318217654163176541681772380017723825177251031772519925614095256149392561514625615899256181532599996926105233264957532672798526897833268979242689853526898590268986582689871926898790269001782690062626900643269008432690103926907695269077312690853826909921269100822691020226910240269105802691578626915899269343312693438226935123269842752698438326984697269990372701337927013912270139282701420927014362270144002701448427014572274675622746760127468336275041762753080027530915275319062753190627535850275367832756033527560455275605872756248927562632275846482783706427968251279696822797111327972544279739752797540627976865279782962797972727981158279811582805130228051656 
echo %size% 
28051656 

을하지만 dir 명령은 크기가 1,907,481,021 바이트 말한다! 무슨 일 이니? 올바른 크기를 얻으려면 어떻게해야합니까? 이 Batch file that returns folder size이 있지만 큰 단위를 MB, GB로 사용하고 싶지 않습니다. 크기를 변수에 넣고 싶습니다.

감사합니다.

+0

당신을 했 meam'+ ='대신'= +'? –

+0

예 복사 및 붙여 넣기 오류가 발생했습니다. 그러나 그 결과는 여전히 옳지 않습니다. –

답변

2

IT는 dir 명령을 사용하여 폴더 크기를 읽고,이 시도 :

@ECHO OFF &SETLOCAL ENABLEDELAYEDEXPANSION 
FOR /f "tokens=3" %%a IN ('dir /a-d /-c') DO (
    SET size=!free! 
    SET free=%%a 
) 
ECHO %size% bytes in %cd% 

이 유럽 시간 형식 작동합니다. AM/PM 형식은 tokens=4입니다.
이것은 Aacini의 솔루션입니다.

+0

'c : \ folder1 \'및 'c : \ folder2'에 대한 크기가 표시되지 않습니까? 나는 항상 마지막 폴더의 크기를 얻는다 : ( –

+0

LS_dev에서 답을 보라 .2GB보다 큰 계산을 위해서는 Windows에서 awk를 사용하거나, Perl' [ActivePerl] (http://www.activestate.com)을 사용해야한다./activeperl) – Endoro

+0

'awk'또는 'perl'에 대한 코드를 제공 할 수 있습니까? –

1

산술 오버플로가 있습니다. 확인

SET /A s=2147483647+1 

환경 변수 산술은 32 비트 부호있는 정수를 통해 수행됩니다.

따라서 안전하게 합계 할 수있는 최대 크기는 2^31-1 = 2147483647입니다.

+0

설명 주셔서 감사합니다! –

1

실제로 바이트로 계산해야하는 경우 숫자를 여러 변수로 분할해야합니다.

lowCount와 마찬가지로 낮은 8 자리와 highCount는 상위 8 자리가되므로 9999TBytes의 해상도로 16 자리 숫자를 얻을 수 있습니다.

큰 숫자를 처리하기 위해 수학 함수를 약간 추가해야합니다.

+0

설명해 주셔서 감사합니다! –

3

이렇게하면 폴더와 해당 하위 디렉터리의 합계가 반환됩니다. 텍스트 파일에 저장된 폴더의 집합에 대한 에 대한

@echo off 
call :size "c:\folder1" 
call :size "c:\folder2" 
pause 
goto :eof 
:size 
for /f "tokens=3" %%b in ('dir /s "%~1" 2^>nul ^|find " File(s) "') do set "n=%%b" 
for /f "tokens=1-4 delims=," %%c in ("%n%") do (
echo %%c%%d%%e%%f bytes [%n%] in "%~1" 
) 
+0

'c : \ folder1 \'및 'c : \ folder2'에서 작동하도록하려면 어떻게해야합니까? 마지막 폴더의 : ( –

+0

두 개의 호출 명령 – foxidrive

+0

에서 내 대답의 변경 사항을 확인합니다. 예, 볼 수 있지만 크기가 합계를 얻을 수 없습니다. folder1 + size : folder2, size gtr 2GB 인 경우. upvote 당신의 대답과 어쩌면 새로운 질문을하십시오. 감사합니다. –

1

코드 :

@ECHO OFF &SETLOCAL ENABLEDELAYEDEXPANSION 
SET "file=file" 
SET /a allsize=0 
for /f %%x in (
'for /f "usebackqdelims=" %%a in (%file%^) do @(
    for /f "tokens=3" %%b in ('dir /a-d /-c "%%~a" ^^^|findstr /BR "[0-9]"'^) do @ECHO(%%b^)' 
) do (
    FOR /f %%i IN ('awk "BEGIN {a=%%x+!allsize!; print a}"') DO SET "allsize=%%i" 
) 
ECHO Size of all folders listet in %file%: 
awk "BEGIN {a=%allsize%; printf(\"%%10d %%s\",a,\"bytes\n\")}" 
awk "BEGIN {a=%allsize%/1024; printf(\"%%10d %%s\",a,\"KB\n\")}" 
awk "BEGIN {a=%allsize%/1024/1024; printf(\"%%10d %%s\",a,\"MB\n\")}" 
awk "BEGIN {a=%allsize%/1024/1024/1024; printf(\"%%10.2g %%s\",a,\"GB\n\")}" 

예 :

 
Size of all folders listet in file: 
1907481021 bytes 
    1862774 KB 
     1819 MB 
     1.8 GB 
+0

설명해 주셔서 감사합니다! –

관련 문제