Contar tamaño de archivos. Esto sirve para medios donde el archivo no contiene la información total del tamaño grabado, por ejemplo en un blu-ray estropeado. Téngase en cuenta que el límite aritmético de cmd.exe es aproximadamente 2 147 483 647, por lo que no funcionará si un archivo individual ocupa más de ese tamaño de bytes.
Este script requiere set /a y la expansión retardada de variables; por tanto, no funcionará en sistemas Ms-DOS, solamente en windows XP y posteriores.
@echo off rem Contar tamaño de archivos rem esto sirve para medios donde el directorio no rem contiene la información, por ejemplo rem un blu-ray estropeado. rem ------------------------------------- rem NO FUNCIONA SI UN ARCHIVO MIDE MÁS DE 2E9 bytes rem (2 gigas) 2 000 000 000 rem Se podría adaptar cambiando su tamaño a rem cadenas de texto, pero tendría que averiguar rem cómo descartar los ceros. setlocal enabledelayedexpansion for %%a in ("%0") do ( if %%~pa.==. ( set comando=%%a ) else ( set comando=%cd%\%%a ) ) set acumula=0 if not !acumula!.==0. ( cmd /x:on /C %cd%\%comando% %* exit ) rem el valor más grande que puede rem contar set /a es rem 2147483647 rem así que necesitamos varios acumuladores: rem acumula (de 0 a 999 999 999) rem acumulab (de 0*10e9 a 0*10e19) rem acumulac (de 0*10e19 a 0*10e29) set DiezE9=1000000000 set acumula=0 set acumulb=0 set acumulc=0 for %%a in (*.*) do ( set /A acumula= !acumula! + %%~za if !acumula! geq %DiezE9% ( echo acumulador mayor que 10e9 set /A cociente= !acumula! / %DiezE9% echo set /A resto= !acumula! %% %DiezE9% set /A resto= !acumula! %% %DiezE9% echo resto: !resto! echo set /A acumulb= !acumulb! + !cociente! set /A acumulb= !acumulb! + !cociente! set /A acumula= !resto! echo set /A acumula= !resto! echo acumuladores: c:!acumulc! b:!acumulb! a:!acumula! rem pause if !acumulb! geq %DiezE9% ( set /A cociente= !acumulb! / %DiezE9% set /A resto= !acumulb! %% %DiezE9% set /A acumulc= !acumulc! + !cociente! set /A acumulb= !resto! echo acumuladores: c:!acumulc! b:!acumulb! a:!acumula! pause ) ) echo !acumulc! !acumulb! !acumula! (%%a) rem pause ) @echo off set acumulc= 000000000%acumulc% set acumulb= 000000000%acumulb% set acumula= 000000000%acumula% echo TOTAL: echo %acumulc:~-9%%acumulb:~-9%%acumula~:-9% echo %acumulc:~-9,3% %acumulc:~-6,3% %acumulc:~-9,3% %acumulb:~-6,3% %acumulb:~-3,3% %acumula:~-9,3% %acumula:~-6,3% %acumula:~-3,3%