如果我检查我的文件夹的大小,我得到这个:
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