Цей пакетний сценарій це зробить.
@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команду, для забезпечення унікальності. Текстовий висновок команди пошуку посилається до nul, по суті, чорної діри - ми цього не хочемо. Оскільки ми завжди додаємо а :в кінці списку, ми також повинні переконатися, що пошуковий запит закінчується :так, щоб він не відповідав частковим результатам - дивіться коментарі.
% ERRORLEVEL% встановлюється findкомандою, значення 0 вказує на відповідність. Тож якщо це не 0, поточне розширення наразі відсутнє у списку, і його слід додати.
Лінія відлуння в основному виводить, і я також замінюю свої заповнювачі ( :) новими рядками, щоб це виглядало приємно.