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 .bat
dosya olarak kaydedin batchfile
ve 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.
%%~xi
uzantısı, dir
komutun 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ı nul
esasen 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% find
komutu 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.