Cómo hacer una lista de todas las carpetas con el tamaño a través del archivo por lotes

Quiero una solución simple para la lista de carpetas y su tamaño en formato txt o csv.

Yo uso este código para la lista de carpetas

dir C:\Temp\*.* /b /a:d > C:\folderList.txt 

salida de stream

 <> folder1 folder2 folder3 

salida deseada

 <> folder1 # 100 MB folder2 # 30 MB folder3 # 110 MB 

Simplemente generaría el tamaño de cada carpeta … ¿Cómo puedo proceder? alguna ayuda

Para cada carpeta en la lista, use el comando dir para recuperar el tamaño de los archivos debajo de la carpeta

 @echo off setlocal disabledelayedexpansion set "folder=%~1" if not defined folder set "folder=%cd%" for /d %%a in ("%folder%\*") do ( set "size=0" for /f "tokens=3,5" %%b in ('dir /-c /a /w /s "%%~fa\*" 2^>nul ^| findstr /b /c:" "') do if "%%~c"=="" set "size=%%~b" setlocal enabledelayedexpansion echo(%%~nxa # !size! endlocal ) endlocal 

Se repite sobre la carpeta indicada (pasada como parámetro al archivo de proceso por lotes, o al directorio actual si no hay parámetro).

Para cada carpeta dentro de ella ( for /d ) se ejecuta un comando dir recursivo dentro del comando inner for , y desde su salida, la línea de resumen al final (extraída por findstr ) se analiza (los tokens en el comando) y el total tamaño de todos los archivos en esta subcarpeta se recupera. Luego, el nombre (y la extensión si lo tiene) de la carpeta y el tamaño de los elementos debajo se repiten en la consola.

Si es necesario crear un archivo, redirija la salida del lote a un archivo

 getSizes.cmd "c:\temp" > C:\folderList.txt 

Utilizando el excelente código de MC ND, agregué la conversión a Kb, Mb, Gb, etc. En caso de que prefiriera tenerlo en esos formatos.

 @echo off setlocal disabledelayedexpansion set "folder=%~1" if not defined folder set "folder=%cd%" for /d %%a in ("%folder%\*") do ( set "size=0" for /f "tokens=3,5" %%b in ('dir /-c /a /w /s "%%~fa\*" 2^>nul ^| findstr /b /c:" "') do if "%%~c"=="" set "size=%%~b" setlocal enabledelayedexpansion call :GetUnit !size! unit call :ConvertBytes !size! !unit! newsize echo(%%~nxa - !newsize! !unit! endlocal ) endlocal exit /b :ConvertBytes bytes unit ret setlocal if "%~2" EQU "KB" set val=/1024 if "%~2" EQU "MB" set val=/1024/1024 if "%~2" EQU "GB" set val=/1024/1024/1024 if "%~2" EQU "TB" set val=/1024/1024/1024/1024 > %temp%\tmp.vbs echo wsh.echo FormatNumber(eval(%~1%val%),1) for /f "delims=" %%a in ( 'cscript //nologo %temp%\tmp.vbs' ) do endlocal & set %~3=%%a del %temp%\tmp.vbs exit /b :GetUnit bytes return set byt=00000000000%1X set TB=000000000001099511627776X if %1 LEQ 1024 set "unit=Bytes" if %1 GTR 1024 set "unit=KB" if %1 GTR 1048576 set "unit=MB" if %1 GTR 1073741824 set "unit=GB" if %byt:~-14% GTR %TB:~-14% set "unit=TB" endlocal & set %~2=%unit% exit /b 

si está utilizando Windows 7 o nuevo use powershell y escriba comando

ls- r >> log.txt

enumerará todos los archivos en el directorio actual junto con el tamaño del archivo en bytes para el archivo de registro.

try sed para Windows:

 dir /-c /a /w /s|sed -nr "/:$/q;/:/h;/^\s+[0-9]/{s/.*[^0-9]([0-9]+.*)/\1/;H;g;s/\n/ /p}" 

Mi utilidad JREN.BAT se puede usar para obtener una lista de carpetas con tamaños. Es una secuencia de comandos híbrida JScript / por lotes que se ejecuta de forma nativa en cualquier máquina con Windows desde XP en adelante.

JREN no convierte convenientemente a MB (ni a ninguna otra unidad); simplemente enumera el tamaño en bytes. Pero seguro es conveniente (y comparativamente rápido) obtener la lista:

 jren "$" "' # '+size()" /d /j /list /p "d:\temp" >"C:\folderList.txt" 

Puede considerar colocar primero el tamaño de la carpeta, espacio relleno en un ancho fijo que exceda la carpeta más grande, seguido por el nombre de la carpeta. Encuentro este formato mucho más fácil de leer, y aún es fácil de analizar:

 jren "^" "size(' ')+' '" /d /j /list /p "d:\temp" >"C:\folderList.txt" 

El resultado sería algo como esto

  1852 SomeFolderName 1616869 Another folder name 137764 yetAnother 

Como JREN es un archivo por lotes, debe usar CALL JREN si coloca el comando dentro de otra secuencia de comandos por lotes.

Tomé el código de @Matt Williamsons y lo hice exportar cada línea a un archivo .csv en el directorio de ejecución, folderSizes.csv. Proporciona el tamaño completo de Byte como columna para que pueda ordenar fácilmente Excel (o lo que sea).

 @echo off echo Getting folder sizes for you...storing to folderSizes.csv setlocal disabledelayedexpansion if EXIST folderSizes.csv del folderSizes.csv echo Folder,Bytes Size,Short Size > folderSizes.csv set "folder=%~1" if not defined folder set "folder=%cd%" for /d %%a in ("%folder%\*") do ( set "size=0" for /f "tokens=3,5" %%b in ('dir /-c /a /w /s "%%~fa\*" 2^>nul ^| findstr /b /c:" "') do if "%%~c"=="" set "size=%%~b" setlocal enabledelayedexpansion call :GetUnit !size! unit call :ConvertBytes !size! !unit! newsize echo(%%~nxa,!size!,!newsize!!unit! >> folderSizes.csv endlocal ) endlocal exit /b :ConvertBytes bytes unit ret setlocal if "%~2" EQU "KB" set val=/1024 if "%~2" EQU "MB" set val=/1024/1024 if "%~2" EQU "GB" set val=/1024/1024/1024 if "%~2" EQU "TB" set val=/1024/1024/1024/1024 > %temp%\tmp.vbs echo wsh.echo FormatNumber(eval(%~1%val%),1) for /f "delims=" %%a in ( 'cscript //nologo %temp%\tmp.vbs' ) do endlocal & set %~3=%%a del %temp%\tmp.vbs exit /b :GetUnit bytes return set byt=00000000000%1X set TB=000000000001099511627776X if %1 LEQ 1024 set "unit=Bytes" if %1 GTR 1024 set "unit=KB" if %1 GTR 1048576 set "unit=MB" if %1 GTR 1073741824 set "unit=GB" if %byt:~-14% GTR %TB:~-14% set "unit=TB" endlocal & set %~2=%unit% exit /b 
Intereting Posts