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 .bat
plik 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 %~1
oznacza „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.
%%~xi
wyodrębnia rozszerzenie z pełnych ścieżek dir
zwracanych 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ą find
polecenia, w celu zapewnienia wyjątkowości. Dane wyjściowe polecenia find są wysyłane do nul
czarnej 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 find
komendę, 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.