Этот пакетный скрипт сделает это.
@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
Сохраните его как любой файл .bat и запустите его с помощью команды batchfile (замените то, что вы назвали), чтобы отобразить текущий каталог, или укажите путь с batchfile "path" . Будет искать все подкаталоги.
Если вы хотите экспортировать в файл, используйте batchfile >filename.txt (или batchfile "path" >filename.txt).
объяснение
Все, что находится перед строкой for /f... просто настраивает: поиск целевого каталога, включение отложенного расширения, которое позволяет мне обновлять переменные в цикле и определение новой строки (LF), которую я могу использовать для более точного вывода. Да, и %~1 означает «получить первый аргумент, удаляя кавычки», что предотвращает двойные кавычки - смотрите for /? ,
Цикл использует эту команду dir /b /s /a:-d "%target%" , собирая список всех файлов во всех подкаталогах под целью.
%%~xi извлекает расширение из полных путей, которые возвращает команда dir .
Пустое расширение заменяется на "FileWithNoExtension", так что вы знаете, что есть такой файл - если я вместо этого добавил пустую строку, это не так очевидно.
Весь текущий список при отправке через команду find , чтобы обеспечить уникальность. Текстовый вывод команды find отправляется в nul , по сути, в черную дыру - нам это не нужно. Так как мы всегда добавляем a : в конец списка, мы также должны убедиться, что поисковый запрос заканчивается на : так что он не соответствует частичным результатам - см. Комментарии.
% ERRORLEVEL% устанавливается командой find , значение 0 указывает на совпадение. Так что, если это не 0, текущее расширение пока отсутствует в списке и должно быть добавлено.
Эхо линии в основном выводит, и я также заменить мои заполнители : с новой строкой , чтобы сделать его хорошо выглядеть.