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.
batchfile "path" >filename.txt
aaa.css
danzzz.cs
, ekstensi.cs
tidak akan dilaporkan oleh skrip.:
memaksanya agar sesuai dengan batas.Meskipun tidak sepenuhnya memenuhi persyaratan untuk skrip batch, saya telah menggunakan skrip powershell baris tunggal:
Anda berpotensi menjalankannya dari file baris perintah / batch:
Saya tidak mengklaim kredit untuk itu, dan tentu saja, Anda perlu Powershell diinstal. Untuk versi Windows yang lebih baru, tidak ada jalan keluarnya.
Jika Anda menghapusnya
C:\MyDirectory
akan mengeksekusi di direktori saat ini.Pada akhirnya akan menghasilkan FileExtensions.txt yang berisi sesuatu seperti berikut:
Bergantung pada struktur folder Anda, kadang-kadang Anda mendapatkan kesalahan yang memberi tahu Anda bahwa Anda memiliki jalan panjang.
Setiap subdirektori di sana juga tidak akan diuraikan tetapi hasil untuk yang lainnya masih akan ditampilkan.
sumber
Berikut jawaban terperinci menggunakan PowerShell (dengan Windows XP Anda harus menginstal PowerShell):
Hai, Penulis Naskah! Bagaimana Saya Dapat Menggunakan Windows PowerShell untuk Memilih Ekstensi File Unik yang Digunakan dalam Kumpulan File?
sumber
Untuk membuat daftar semua ekstensi unik dari cmd di bawah jalur yang digunakan saat Anda:
sumber
Saya merasa berguna untuk berubah
untuk
dan untuk berubah
untuk
File yang dihasilkan berisi (tidak ada umpan baris, tapi tidak masalah) .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
yang kemudian dapat saya gunakan untuk proyek saya.
sumber