Este script por lotes lo hará.
@echo off
set target=%~1
if "%target%"=="" set target=%cd%
setlocal EnableDelayedExpansion
set LF=^
rem Previous two lines deliberately left blank for LF to work.
for /f "tokens=*" %%i in ('dir /b /s /a:-d "%target%"') do (
set ext=%%~xi
if "!ext!"=="" set ext=FileWithNoExtension
echo !extlist! | find "!ext!:" > nul
if not !ERRORLEVEL! == 0 set extlist=!extlist!!ext!:
)
echo %extlist::=!LF!%
endlocal
Guárdelo como cualquier .batarchivo y ejecútelo con el comando batchfile(sustituya el nombre que haya nombrado) para enumerar el directorio actual o especifique una ruta con batchfile "path". Buscará todos los subdirectorios.
Si desea exportar a un archivo, use batchfile >filename.txt(o batchfile "path" >filename.txt).
Explicación
Todo antes de la for /f...línea simplemente configura las cosas: hace que el directorio de destino busque, habilita la expansión retardada, lo que me permite actualizar las variables en el bucle y define una nueva línea ( LF) que puedo usar para una salida más ordenada. Ah, y los %~1medios "obtienen el primer argumento, eliminando comillas" que evitan las comillas duplicadas, ver for /?.
El bucle usa ese dir /b /s /a:-d "%target%"comando, capturando una lista de todos los archivos en todos los subdirectorios bajo el objetivo.
%%~xiextrae la extensión de las rutas completas que dirdevuelve el comando.
Una extensión vacía se reemplaza con "FileWithNoExtension", para que sepa que existe dicho archivo; si agregué una línea vacía, no es tan obvio.
La lista actual completa si se envía a través de un findcomando, para garantizar la unicidad. La salida de texto del comando find se envía nul, esencialmente a un agujero negro, no lo queremos. Como siempre agregamos un :al final de la lista, también debemos asegurarnos de que la consulta de búsqueda finalice con un :para que no coincida con los resultados parciales; vea los comentarios.
El findcomando establece% ERRORLEVEL% , un valor de 0 indica que hubo una coincidencia. Entonces, si no es 0, la extensión actual no está en la lista hasta el momento y debe agregarse.
La línea de eco básicamente sale, y también reemplazo mis marcadores de posición ( :) con nuevas líneas para que se vea bien.