Lote: Recupera el tamaño de las diferentes carpetas

BenjaminA2mains Mensajes publicados 44 Estado Miembro -  
brucine Mensajes publicados 24709 Fecha de registro   Estado Miembro Última intervención   -

Hola,

Tengo más una pregunta que un problema.

Resulta que tengo este script en batch que me muestra en bytes / Ko / Mo / Go el tamaño de las diferentes carpetas del directorio en el que se ejecuta el script.

Así que para ello, tengo este pequeño script:

FOR /D %%d IN (*) DO ( FOR /R "." %%s IN (*) DO ( SET /A size+=%%~zs ) SET doss=%%~nd ) ECHO %doss% : %size% o SET /A size_ko=%size%/1024 ECHO %doss% : ~%size_ko% Ko SET /A size_mo=%size_ko%/1024 ECHO %doss% : ~%size_mo% Mo SET /A size_go=%size_mo%/1024 ECHO %doss% : ~%size_go% Go

Este pequeño script funciona muy bien, pero (sí, porque siempre hay algo que no va bien) no me muestra el tamaño correcto...

Actualmente está analizando una carpeta de ~78 Go (no me importa que el script sea rápido o no, tengo todo mi tiempo) pero muestra que solo tengo ~838 Mo. Si alguien tiene alguna idea del porqué.

Aclaro que las diferentes carpetas están llenas únicamente de imágenes en formato PNG y están organizadas nombradas así: frame_%num.png.

¿Acaso el análisis de archivos / carpetas está limitado en tamaño para evitar posibles tareas demasiado largas o simplemente están limitados por una cantidad máxima de archivos diferentes por carpeta?

1 respuesta

barnabe0057 Mensajes publicados 14329 Fecha de registro   Estado Colaborador Última intervención   4 930
 

Hola,

Para resolver el problema, diría que hay que "retrazar" la variable size así:

setlocal enabledelayedexpansion FOR /D %%d IN (*) DO ( FOR /R "." %%s IN (*) DO ( SET /A size+=%%~zs ) SET doss=%%~nd ) ECHO !doss! : !size! o SET /A size_ko=!size!/1024 ECHO !doss! : ~%size_ko% Ko SET /A size_mo=%size_ko%/1024 ECHO !doss! : ~%size_mo% Mo SET /A size_go=%size_mo%/1024 ECHO !doss! : ~%size_go% Go

-

También podrías simplificar el script así:

setlocal enabledelayedexpansion FOR /R "." %%s IN (*) DO SET /A size+=%%~zs ECHO !CD! : %size% o SET /A size_ko=%size%/1024 ECHO !CD! : ~%size_ko% Ko SET /A size_mo=%size_ko%/1024 ECHO !CD! : ~%size_mo% Mo SET /A size_go=%size_mo%/1024 ECHO !CD! : ~%size_go% Go


2
brucine Mensajes publicados 24709 Fecha de registro   Estado Miembro Última intervención   4 148
 

Hola,

No olvide que en caso de un archivo de más de 2 Go vamos a encontrarnos con el límite de cálculo a 2^31.

Entonces, antes del cálculo, debemos limitar la visualización del tamaño en bytes a 9 cifras:

SET/A "SIZE9=%SIZE:~0,9%"

Si quiero ser extremadamente meticuloso y mostrar el número con decimales, además tendré que comprobar la longitud de la cadena en bytes para aplicar el formato de salida adecuado después de la división, según si estamos en el rango de 1 a 10, de 10 a 99 o de 100 a 999 Mo.

-4
brucine Mensajes publicados 24709 Fecha de registro   Estado Miembro Última intervención   4 148 > brucine Mensajes publicados 24709 Fecha de registro   Estado Miembro Última intervención  
 

Para aquellos que no están de acuerdo, intenten al azar con un archivo de 5,50 Go:

 H:\archives\10>SET /A size+=5910536192 Número no válido. Los números están limitados a una precisión de 32 bits

que no tendré, por tanto, ninguna forma de dividir por 1024

-1