ver tamaño subdirectorios subcarpetas por ocupado mas los listar grandes espacio directorios carpetas carpeta archivos scripting batch-file directory size

scripting - subdirectorios - Archivo por lotes para mostrar el tamaño del directorio



ver tamaño de archivos ubuntu (6)

Hola chicos, me pregunto si pueden ayudarme a modificar este guión con el que he estado jugando, no puedo permitir que acepten comodines ''*''

@echo off setLocal EnableDelayedExpansion set /a value=0 set /a sum=0 FOR /R %1 %%I IN (*) DO ( set /a value=%%~zI/1024 set /a sum=!sum!+!value! ) @echo Size is: !sum! k

Está en un archivo por lotes llamado dirsize y se llama así

dirsize c:/folder

Quiero que revise los tamaños de las carpetas, este es un ejemplo, el caché en firefox

dirsize C:/users/%username%/AppData/Local/Mozilla/Firefox/*.default/Cache

Devuelve el valor 0

Pero si voy

dirsize C:/users/%username%/AppData/Local/Mozilla/Firefox/sr1znnb4.default/Cache

Funciona y obtengo el valor 55322 devuelto. ¿Ayuda por favor? Gracias por adelantado gente amable


Debería ajustar lo que tiene actualmente en otro bucle for que expande * en una serie de directorios.

Asi que

@echo off setLocal EnableDelayedExpansion set /a sum=0 for /d %%D in (%1) do ( FOR /R %%D %%I IN (*) DO ( set /a value=%%~zI/1024 set /a sum=!sum!+!value! ) ) echo Size is: !sum! k

podría funcionar (aún no probado, pero debería darle la idea general)


Si tiene una versión de Windows de grep (puede encontrar una en las utilidades de GNU para Win32 ) puede hacer algo como esto:

dir /s %1 | grep --after-context=1 "Total Files Listed:"


PowerShell lo hace fácil, por supuesto:

(gci . -Recurse | Measure-Object -Property Length -Sum).Sum

Y PowerShell ya está instalado en Windows 7. ¡Súbete al carro! :-)

Además, C:/users/%USERNAME%/AppData/ no es una forma confiable de encontrar AppData. Pruebe %APPDATA% (o $env:APPDATA en PowerShell).


Bien para empezar, digamos que los comodines no son bien compatibles en los archivos por lotes, y especialmente en los bucles .
Eso es lo que se me ocurrió:

DirSize.cmd " ruta válida "

@echo off rem Args[1]= "Path" or "valid path with wildcard" set _size=0 set dRaw=%~1 echo %~1|findstr "*"&& set dSource=%~dp1|| ( set dSource=%~1/ if not "%dRaw:~-1%"=="/" set dRaw=%dRaw%/ ) for /f "delims=" %%D in (''dir /ad /b %dRaw%'') do call :DirSize "%dSource%%%~D" set /a size=_size/1024 echo size=%size% k (%_size% bytes) exit /b 0 :DirSize call :FileSize "%~1" for /f "delims=" %%d in (''dir /ad /b "%~1"2^>nul'') do call :DirSize "%~1/%%~d" exit /b 0 :FileSize for /f "delims=" %%f in (''dir /a-d /b "%~1/"2^>nul'') do for %%F in (%1/%%f) do set /a _size+=%%~zF exit /b 0

___Uso___
Argumento: debe ser una ruta (no un archivo) que contenga comodines o no. La ruta de acceso necesita ser válida al escribir ruta de acceso a directorios

___Notes___
Este script comprueba todos los archivos y subdirectorios, incluso los ocultos / del sistema. cambie el argumento dir / a y agregue -hs (like / ad-hs) para eliminar este comportamiento.

Revisé el argumento revisando a mi gusto ahora, así que creo que es útil.

Espero que esto ayude.


Este código aumentará el límite de tamaño de directorio hasta 2,000,000 TB y mostrará más tamaño real, lo que sería útil si la carpeta contiene demasiados archivos.

rem SET DIR=%1 SET DIR=C:/DIR1/ IF NOT EXIST "%DIR%" ( ECHO Directory "%DIR%" does not exist. goto END ) setlocal EnableDelayedExpansion set GB= set SIZE= set exp=000000000 FOR /R "%DIR%" %%F IN (*) DO ( set /a SIZE=!SIZE!+%%~zF if !SIZE! geq 1!exp! ( set /a GB=!GB!+!SIZE:~0,-9! for /f "tokens=* delims=0" %%a in ("!SIZE:~-9!") do set SIZE=%%a ) ) if not defined SIZE set SIZE=0 if not defined GB goto EOS FOR /L %%N IN (1,1,9) DO ( if "!SIZE:~%%N!" == "" ( set SIZE=!GB!!exp:~%%N!!SIZE! goto EOS ) ) :EOS call :Divide !SIZE! 1024 SIZEKB echo Size is: !SIZE!B (!SIZEKB!kB) endlocal :END pause exit :Divide set Num1=%~1 set Num2=%~2 set %3= set Num= set Number= IF !Num2! EQU 0 goto :EOF FOR /L %%N IN (0,1,18) DO ( if "!Num1:~%%N!" == "" goto :EOD set Number=!Number!!Num1:~%%N,1! if !Number! geq !Num2! ( set /a quotient=!Number!/!Num2! set /a Number=!Number!-!quotient!*!Num2! if !Number! equ 0 set Number= set Num=!Num!!quotient! ) else ( if defined Num set Num=!Num!0 ) ) :EOD if not defined Num set Num=0 set %3=%Num% goto :EOF


10 veces más rápido que hacerlo a través de FOR. Con la ventaja de poder usar cualquiera de los parámetros permitidos del comando DIR (en este caso / S)

@ECHO OFF SET folder="C:/WINDOWS" call:timer ECHO Processing, please wait... CALL :folderSize size %folder% "/S" CALL :strNumDivide sizeKb %size% 1024 CALL :strNumDivide sizeMb %sizeKb% 1024 CALL :strNumDivide sizeGb %sizeMb% 1024 CALL :formatNumber size %size% CALL :formatNumber sizeKb %sizeKb% CALL :formatNumber sizeMb %sizeMb% CALL :formatNumber sizeGb %sizeGb% ECHO. ECHO Size of %folder%: ECHO. ECHO %size% bytes ECHO %sizeKb% Kb ECHO %sizeMb% Mb ECHO %sizeGb% Gb ECHO. pause exit /b :: Function to calculate the size of a directory and its subdirectories ::---------------------------------------------------------------------- :folderSize <returnVariableName> <folder> [DIR parameters] SetLocal EnableExtensions EnableDelayedExpansion SET folder=%2 SET params=%~3 IF NOT DEFINED folder SET folder="%CD%" DIR %params% /W "%folder:"=%" > %TEMP%/folderSize.tmp FOR /F "tokens=1 delims=:" %%x IN (''findstr /n /e ":" %TEMP%/folderSize.tmp'') DO (SET line=%%x) IF DEFINED line ( SET /A line = !line! + 1 FOR /F "tokens=4 delims= " %%i IN (''findstr /n "bytes" %TEMP%/folderSize.tmp^|findstr "!line!:"'') DO (SET size=%%i) SET size=!size:.=! ) ELSE ( FOR /F "tokens=3 delims= " %%i IN (''findstr /e "bytes" %TEMP%/folderSize.tmp'') DO (SET size=%%i) SET size=!size:.=! ) DEL %TEMP%/folderSize.tmp > nul EndLocal & SET "%~1=%size%" GOTO:EOF :: Extras functions to convert between different units and to give numerical format :: -------------------------------------------------------------------------------- :strNumDivide <returnVariableName> <stringNum> <divisor> SetLocal EnableExtensions EnableDelayedExpansion SET strNum=%~2 SET divisor=%~3 SET result= SET number= IF !divisor! EQU 0 GOTO:EOF FOR /L %%n IN (0,1,18) DO ( IF NOT "!strNum:~%%n!" == "" ( SET number=!number!!strNum:~%%n,1! IF !number! GEQ !divisor! ( SET /A quotient=!number! / !divisor! SET /A number=!number! - !quotient! * !divisor! IF !number! EQU 0 SET number= SET result=!result!!quotient! ) ELSE ( IF DEFINED result SET result=!result!0 ) ) ) IF NOT DEFINED result SET "result=0" EndLocal & SET "%~1=%result%" GOTO:EOF :formatNumber <returnVariableName> <number> [separator [group size]] SetLocal EnableExtensions EnableDelayedExpansion SET "raw=%~2" SET "separator=%~3" SET "group=%~4" SET "answer=" IF NOT DEFINED raw GOTO :EOF IF NOT DEFINED separator SET "separator=." IF NOT DEFINED group SET "group=3" FOR %%g IN (-%group%) DO ( FOR /F "tokens=1,2 delims=,." %%a IN ("%raw%") DO ( SET int=%%a SET frac=%%b FOR /F "delims=:" %%c IN (''^(ECHO;!int!^& Echo.NEXT LINE^)^|FindStr /O "NEXT LINE"'') DO ( SET /A length=%%c-3 ) FOR %%c IN (!length!) DO ( SET radix=!raw:~%%c,1! ) FOR /L %%i IN (!length!, %%g, 1) DO ( SET answer=!int:~%%g!!separator!!answer! SET int=!int:~0,%%g! ) ) ) SET answer=%answer: =% SET answer=%answer:~0,-1% EndLocal & SET "%~1=%answer%%radix%%frac%" Goto :EOF

Ejemplo de resultado de salida: (en el ejemplo, la rutina tardó 3 segundos en calcular el tamaño de C: / WINDOWS con un tamaño de 28 GB)

Processing, please wait... Size of "C:/WINDOWS": 30.936.389.769 bytes 30.211.318 Kb 29.503 Mb 28 Gb Elapsed Time: 3 secs