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