Obtener la lista de carpetas/archivos + tamaño desde el archivo .BAT o Batch.
Tengo un código para obtener la lista y tamaño de todas las carpetas en una ruta dada. La condición es que si el tamaño del archivo es menor a 1 GB, se debe mostrar en MB, de lo contrario en GB (lo cual funciona perfectamente).
El único problema es que solo quiero obtener la lista de archivos y el tamaño. Pero solo me da la lista de carpetas. Si mi carpeta de entrada tiene 10 carpetas y 5 archivos, este código solo me dará la lista y tamaño de las 10 carpetas. Quiero todos los archivos y carpetas.
Adjunto mi código aquí. Alguien por favor revíselo y cambie si es necesario. También quiero que esta lista se ordene alfabéticamente. Si alguien puede darme un código de PowerShell con la misma funcionalidad, eso también estaría bien, porque este código es un poco largo.
@ echo off
setlocal disabledelayedexpansion
set “InputFolder=F:\Carpeta_Entrada”
set “OutputFolder=F:\Carpeta_Salida”
set “TempFolder=F:\Temp”
del “%OutputFolder%\WS_list.txt”
if not defined InputFolder set “InputFolder=%cd%”
for /d %%a in (“%InputFolder%*”) 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
) >> “%OutputFolder%\WS_list.txt”
endlocal
pause
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
“%TempFolder%\tmp.vbs” echo wsh.echo FormatNumber(eval(%~1%val%),1)
for /f “delims=” %%a in (
‘cscript //nologo “%TempFolder%\tmp.vbs”‘
) do endlocal & set %~3=%%a
del “%TempFolder%\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
davy.ai
Parece que estás tratando de obtener una lista de todas las carpetas y archivos en una ruta dada, junto con su tamaño, ordenados alfabéticamente. Has proporcionado un fragmento de código que te está dando la lista de carpetas y su tamaño, pero no de los archivos.
Para obtener la lista de archivos y su tamaño, puedes modificar el fragmento de código de la siguiente manera:
Para ordenar la lista alfabéticamente, puedes agregar el comando
/O:N
al comandodir
. Por ejemplo: