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.
batchfile "path" >filename.txt
aaa.css
izzz.cs
,.cs
skrypt nie zgłosi rozszerzenia .:
aby wymusić dopasowanie do granic.Chociaż nie jestem ściśle zgodny z wymaganiami dla skryptu wsadowego, użyłem jednowierszowego skryptu PowerShell:
Możesz potencjalnie uruchomić go z wiersza poleceń / pliku wsadowego:
Nie żądam za to uznania i oczywiście będziesz potrzebować zainstalowanego programu PowerShell. W przypadku nowszych wersji systemu Windows nie można tego obejść.
Jeśli
C:\MyDirectory
go usuniesz , zostanie on uruchomiony w bieżącym katalogu.Na koniec wygeneruje FileExtensions.txt zawierający coś takiego:
W zależności od struktury folderów mogą się czasem pojawiać błędy informujące o długiej ścieżce.
Wszystkie podkatalogi również nie zostaną przeanalizowane, ale wyniki dla wszystkich pozostałych elementów nadal będą wyświetlane.
źródło
Oto szczegółowa odpowiedź przy użyciu programu PowerShell (w systemie Windows XP trzeba zainstalować program PowerShell):
Hej, Skrypciarze! Jak użyć programu Windows PowerShell do wybrania unikalnych rozszerzeń plików używanych w kolekcji plików?
źródło
Aby wyświetlić listę wszystkich unikalnych rozszerzeń z cmd pod ścieżką, z której korzystasz:
źródło
Uznałem, że warto to zmienić
do
i zmienić
do
Wygenerowany plik zawierał (nie ma linii, ale nie ma znaczenia) .bat.pdf.skp.ai.png.jpg.tif.pcp.txt.lst.ttf.dfont.psd.indd.docx.PDF.JPG.gif.jpeg .dwg.exr.FileWithNoExtension.vrlmap.sat.bak.ctb
które mogłem następnie wykorzystać w moim projekcie.
źródło