3

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

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

但是 dir 命令说大小是1,907,481,021字节!出了什么问题?我怎样才能得到合适的尺寸?我有这个返回文件夹大小的批处理文件,但我不希望像 MB、GB 这样的大单位。我想把大小放在一个变量中。

谢谢。

4

5 回答 5

4

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

@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"
)
于 2013-07-25T14:15:26.017 回答
2

试试这个,它使用以下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 的解决方案。

于 2013-07-25T13:28:06.777 回答
1

您正面临算术溢出。查看

 SET /A s=2147483647+1

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

因此,您可以安全计算的最大大小是2^31-1 = 2147483647.

于 2013-07-25T13:03:02.810 回答
1

如果您真的需要以字节为单位,那么您需要将您的数字拆分为多个变量。

像 lowCount 低 8 位和 highCount 高 8 位一样,你得到 16 位,分辨率高达 9999TBytes。

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

于 2013-07-25T13:15:58.640 回答
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\")}"

例子:

文件中所有文件夹列表的大小:
1907481021 字节
   1862774 KB
      1819 MB
       1.8 GB
于 2013-07-26T11:28:28.027 回答