Puede sumar tamaños recursivamente (el siguiente es un archivo por lotes):
@echo off
set size=0
for /r %%x in (folder\*) do set /a size+=%%~zx
echo %size% Bytes
Sin embargo, esto tiene varios problemas porque cmd
se limita a la aritmética de enteros con signo de 32 bits. Por lo tanto, obtendrá tamaños superiores a 2 GiB incorrectos 1 . Además, es probable que cuente los enlaces simbólicos y las uniones varias veces, por lo que es, en el mejor de los casos, un límite superior, no el tamaño real (sin embargo, tendrá ese problema con cualquier herramienta).
Una alternativa es PowerShell:
Get-ChildItem -Recurse | Measure-Object -Sum Length
o más corto:
ls -r | measure -sum Length
Si lo quieres más bonito:
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" }
}
Puede usar esto directamente desde cmd
:
powershell -noprofile -command "ls -r|measure -sum Length"
1 Tengo una biblioteca bignum parcialmente terminada en archivos por lotes en algún lugar que al menos obtiene la suma de enteros de precisión arbitraria. Realmente debería lanzarlo, supongo :-)
du
da el tamaño del directorio, pero todo lo que hace es caminar por el árbol y resumir. Algo que se puede expresar de manera muy elegante en una tubería como aquí :-). Entonces, para PowerShell, generalmente busco cómo puede descomponer el objetivo de alto nivel en operaciones adecuadas de nivel inferior.folder\*
no me funciona el tamaño de la carpeta que puse en el lugar muestra 0 bytes, ¿hay alguna solución?