Script batch ini akan melakukannya.
@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
Simpan sebagai .bat
file apa pun , dan jalankan dengan perintah batchfile
(ganti apa pun yang Anda beri nama) untuk mendaftar direktori saat ini, atau tentukan path dengan batchfile "path"
. Ini akan mencari semua subdirektori.
Jika Anda ingin mengekspor ke file, gunakan batchfile >filename.txt
(atau batchfile "path" >filename.txt
).
Penjelasan
Semuanya sebelum for /f...
baris hanya mengatur segalanya: ia mendapatkan direktori target untuk dicari, memungkinkan ekspansi tertunda yang memungkinkan saya melakukan pembaruan variabel dalam loop dan mendefinisikan baris baru ( LF
) yang dapat saya gunakan untuk output yang lebih rapi. Oh, dan %~1
sarana "dapatkan argumen pertama, hapus tanda kutip" yang mencegah tanda kutip dua kali lipat - lihat for /?
.
Loop menggunakan dir /b /s /a:-d "%target%"
perintah itu, mengambil daftar semua file di semua subdirektori di bawah target.
%%~xi
mengekstrak ekstensi dari jalur lengkap yang dir
dikembalikan oleh perintah.
Ekstensi kosong diganti dengan "FileWithNoExtension", jadi Anda tahu ada file seperti itu - jika saya menambahkan baris kosong sebagai gantinya, itu tidak begitu jelas.
Seluruh daftar saat ini jika dikirim melalui find
perintah, untuk memastikan keunikan. Keluaran teks dari perintah find dikirim ke nul
, pada dasarnya black hole - kami tidak menginginkannya. Karena kami selalu menambahkan a :
di akhir daftar, kami juga harus memastikan kueri penelusuran berakhir dengan :
sehingga tidak cocok dengan hasil sebagian - lihat komentar.
% ERRORLEVEL% diatur oleh find
perintah, nilai 0 menunjukkan ada kecocokan. Jadi, jika bukan 0, ekstensi saat ini tidak ada dalam daftar sejauh ini dan harus ditambahkan.
Garis gema pada dasarnya output, dan saya juga mengganti placeholder saya ( :
) dengan baris baru agar terlihat bagus.