如何批量获取以字节为单位的文件夹的大小

如果我检查我的文件夹的大小,我得到这个:

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

但是dir命令说的大小是1,907,481,021字节! 出了什么问题? 我怎样才能得到正确的尺寸? 我有这个batch file,返回文件夹大小 ,但我不希望大单位MB,GB。 我想把大小放在一个variables中。

谢谢。

试试这个,它用dir命令读取文件夹大小:

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

这适用于欧洲时间格式。 AM/PM格式设置tokens=4
这是Aacini的解决方案。

这将返回文件夹及其子目录的总和。

 @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" ) 

您正面临算术溢出。 检查

  SET /A s=2147483647+1 

环境变量算术是通过32位有符号整数完成的。

所以,你最大的号码你可以安全的总和是2^31-1 = 2147483647

如果你真的需要以字节计数,那么你需要将你的数字分成多个变量。

像lowCount的低8位和highCount的上8 Digitis,所以你得到16位数的分辨率达9999TBytes。

你只需要添加一些数学函数来处理大数字。

awk代码存储在一个文本文件中的一组文件夹:

 @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 /ad /-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\")}" 

例:

所有文件夹在文件中的大小:
 1907481021字节
    1862774 KB
       1819 MB
        1.8 GB