Usted puede añadir hasta tamaños de forma recursiva (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
está limitado a 32 bits aritmética de enteros con signo. Por lo tanto, obtendrá tamaños superiores a 2 GiB incorrectos . Además, probablemente contará enlaces simbólicos y cruces múltiples veces, por lo que es, en el mejor de los casos, un límite superior, no el tamaño real (sin embargo, tendrás ese problema con cualquier herramienta).
Una alternativa es PowerShell:
Get-ChildItem -Recurse | Measure-Object -Sum Length
o más corto:
ls -r | measure -s Length
si lo quieres más bonita:
switch((ls -r|measure -s 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" }
}
Se puede utilizar esta directamente desde cmd
:
powershell -noprofile -command "ls -r|measure -s Length"
tengo una biblioteca bignum parcialmente terminada en archivos por lotes en algún lugar, que al menos obtiene además de enteros de precisión arbitraria derecha. Realmente debería liberarlo, supongo :-)
+1 Estaba vagando en el Get-Help * La salida de encontrar algo por el estilo. – Steve
Steve, en mi opinión, PowerShell es mucho más Unix-y que Unix en que la mayoría de los comandos básicos son realmente ortogonales. En Unix, 'du' proporciona el tamaño del directorio, pero lo único que hace es recorrer el árbol y resumir. Algo que se puede expresar muy elegantemente en una tubería como aquí :-). Entonces, para PowerShell generalmente busco cómo descomponer la meta de alto nivel en operaciones adecuadas de nivel inferior. – Joey
Parece que no devuelve el resultado actual para el directorio de inicio de un usuario. En un caso, si hago clic derecho en una carpeta de inicio y obtengo propiedades, veo ~ 200 MB. Si hago ls -r