Ten skrypt wsadowy to zrobi.
@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
Zapisz go jako dowolny .batplik i uruchom go za pomocą polecenia batchfile(zastąp go tym, co go nazwałeś), aby wyświetlić bieżący katalog lub podaj ścieżkę batchfile "path". Przeszuka wszystkie podkatalogi.
Jeśli chcesz wyeksportować do pliku, użyj batchfile >filename.txt(lub batchfile "path" >filename.txt).
Wyjaśnienie
Wszystko przed for /f...wierszem po prostu konfiguruje: pobiera katalog docelowy do przeszukiwania, umożliwia opóźnione rozszerzanie, co pozwala mi aktualizować zmienne w pętli i definiuje znak nowej linii ( LF) , którego można użyć do uzyskania ładniejszych wyników. Aha, a %~1oznacza „pobierz pierwszy argument, usuwając cudzysłowy”, co zapobiega podwojonym cudzysłowom - patrz for /?.
Pętla używa tego dir /b /s /a:-d "%target%"polecenia, pobierając listę wszystkich plików we wszystkich podkatalogach pod celem.
%%~xiwyodrębnia rozszerzenie z pełnych ścieżek dirzwracanych przez polecenie.
Puste rozszerzenie jest zastępowane przez „FileWithNoExtension”, więc wiesz, że istnieje taki plik - jeśli zamiast tego dodam pustą linię, nie jest to tak oczywiste.
Cała bieżąca lista, jeśli zostanie wysłana za pomocą findpolecenia, w celu zapewnienia wyjątkowości. Dane wyjściowe polecenia find są wysyłane do nulczarnej dziury - nie chcemy tego. Ponieważ zawsze dodajemy znak „ :na końcu listy”, należy również upewnić się, że wyszukiwane hasło kończy się znakiem „ :tak”, aby nie pasowało do częściowych wyników - patrz komentarze.
% ERRORLEVEL% jest ustawiane przez findkomendę, wartość 0 oznacza, że było dopasowanie. Więc jeśli nie jest to 0, obecne rozszerzenie nie znajduje się dotychczas na liście i powinno zostać dodane.
Linia echa generalnie generuje, a także zastępuję moje symbole zastępcze ( :) nowymi liniami, aby wyglądały ładnie.