Bu toplu komut dosyası yapacak.
@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
Herhangi bir .batdosya olarak kaydedin batchfileve geçerli dizini listelemek için komutla çalıştırın (adını verdiğiniz şeyin yerine koyun) veya yolunu belirtin batchfile "path". Tüm alt dizinleri arayacaktır.
Bir dosyaya vermek istiyorsanız, batchfile >filename.txt(veya batchfile "path" >filename.txt) kullanın .
açıklama
Satırdan önceki her şey for /f...sadece işleri ayarlar: arama yapmak için hedef dizini alır , döngüde güncelleme değişkenleri yapmama izin veren gecikmeli genişletmeyi sağlar ve neater çıkışı için kullanabileceğim bir newline ( LF) tanımlar . Oh, ve %~1"iki argümanlı alıntıları önleyen" ilk argümanı al, tırnakları kaldır "araçları - bak for /?.
Döngü, bu dir /b /s /a:-d "%target%"komutu kullanarak hedefin altındaki tüm alt dizinlerdeki tüm dosyaların listesini alır.
%%~xiuzantısı, dirkomutun döndürdüğü tam yolların dışına çıkarır .
Boş bir uzantı "FileWithNoExtension" ile değiştirilir, bu nedenle böyle bir dosya olduğunu bilirsiniz - bunun yerine boş bir satır eklersem, o kadar açık değildir.
Tüm mevcut liste find, benzersizliği sağlamak için bir komutla gönderilirse . Find komutunun metin çıktısı nulesasen karadeliğe gönderilir - istemiyoruz. :Listenin sonuna her zaman bir tane eklediğimizden , :kısmi sonuçlarla eşleşmeyecek şekilde arama sorgusunun bittiğinden de emin olmalıyız - yorumları görün.
% ERRORLEVEL% findkomutu tarafından ayarlanır , 0 değeri bir eşleşme olduğunu gösterir. Bu nedenle, 0 değilse, geçerli uzantı listede bulunmuyor ve eklenmelidir.
Yankı çizgisi temelde çıktı verir ve ayrıca :güzel görünmesi için yer tutucularımı ( ) yeni satırlarla değiştiririm.