Dapatkan nama file telanjang secara rekursif di command prompt

19

Saya mengalami hambatan kecil yang mencoba hanya mendapatkan nama file (tidak ada ekstensi atau path file) secara rekursif. Ini bekerja untuk saya di folder root:

dir /b

Tetapi ketika saya menambahkan / s untuk memindai secara rekursif saya juga mendapat path file sebelum nama file yang tidak saya inginkan. Apakah ada cara untuk mendapatkan nama file kosong dari semua subfolder dalam direktori?

Saya pada Windows 7 x64 Saya lebih suka menggunakan command prompt biasa bukan PS atau VBS

TMRW
sumber

Jawaban:

15

Gunakan perintah berikut:

dir /b /a /s
  • / b menghapus tanggal dan detail lainnya dari output
  • / a hanya menampilkan nama file, tidak ada jalur
  • / s memungkinkan daftar direktori rekursif

Jika Anda perlu menyimpan output ke file, Anda dapat menggunakan:

dir /b /a /s >> list_of_names.txt

EDIT Sebenarnya solusi di atas tidak mencapai tujuan pertanyaan semula. Satu hal yang saya perhatikan dari pertanyaan adalah bahwa posting meminta daftar rekursif. yang kekurangan jawaban lain jadi saya pikir menambahkan "/ s" di jawaban penjawab lain akan melakukan trik

for /f %a in ('dir /b /s') do @echo %~na
Nik Jadi
sumber
Bisakah Anda menjelaskan ini? Bagi saya itu tidak masuk akal.
Simon Sheehan 8/11
4
Ini tidak berfungsi, / a tidak berfungsi seperti itu - ini adalah filter untuk jenis file yang ingin Anda daftarkan. Itu tidak menghapus jalur dari nama file ketika melakukan daftar direktori rekursif.
Gaff
diedit jawabannya; dan baru saja mendapatkan kotak Windows lagi, saya pikir kali ini yang harus dilakukan (win732bit)
Nik So
6

Coba ini:

for /f "delims=" %a in ('dir /b /s') do @echo %~na

Informasi lebih lanjut tentang cara kerja dan apa yang dikerjakannya, ketik for /?

Multiverse IT
sumber
Ini hampir berhasil tetapi ada masalah besar. Ini hanya menampilkan kata pertama dari nama file. Jika nama file misalnya "gambar liburan saya 1" maka hanya menampilkan "saya"
TMRW
coba ini: untuk / f "delims = |" % a in ('dir / b') do @echo% ~ na. Secara default parameter / f FOR akan melakukan tokenize pada spasi. Mengatur token ke karakter yang seharusnya tidak muncul dalam nama file / direktori akan memberi Anda seluruh nama termasuk spasi.
Scott McKinney
Jika Anda ingin output dikirim ke file, tambahkan>> filename.txt
Gruber
2
for /r %i in (*) do @echo %~ni

atau

forfiles /s /c "cmd /c if @isdir==FALSE noquotes.bat @fname"

dengan asumsi file noquotes.batdalam % PATH% Anda dengan konten ini

@echo %~1

untuk / r pendekatan dijelaskan

for /rberjalan direktori saat ini secara rekursif (Anda dapat menentukan direktori for /r drive:\path\, direktori saat ini diasumsikan) dan mengeksekusi perintah yang ditentukan oleh do untuk setiap file yang cocok dalam set (*). Set (.)hanya akan cocok dengan direktori. @echo% ~ ni Perintah ini berfungsi apa adanya dari prompt. Gandakan kutipan Anda jika Anda memasukkannya ke dalam file batch. yaitufor /r %%i in (*) do @echo %%~ni

Pendekatan forfiles menjelaskan

/smenghitung saat ini dan semua subdirektori
/cmengeksekusi perintah di dalam tanda kutip
@isdirdan @fnamemerupakan simbol yang dipancarkan ke dalam string perintah
File batch tambahan noquotes.batmembantu dengan menghapus tanda kutip ganda dengan% ~ 1 (parameter 1)
forfilesjuga memungkinkan Anda menentukan jalur untuk memulai diforfiles /P C:\Windows ...

JJS
sumber
@ DavidPostill ya, itu jawaban yang buruk. Terima kasih atas komentar anda Tolong beri tahu saya jika saya dapat meningkatkan jawaban saya lebih lanjut.
JJS
@ DavidPostill Anda tidak memiliki jawaban atau komentar sebelumnya. apakah Anda memoderasi pertanyaan, atau mencari jawaban dan menemukan jawaban kualitas saya yang buruk?
JJS
Jawaban Anda muncul di antrian ulasan "Kiriman Berkualitas Rendah". Seperti yang saya ketahui banyak tentang file batch saya mengambil dekat itu.
DavidPostill
@ Davidvid, terima kasih atas ulasan Anda. Saya menyambut ulasan Anda tentang perubahan yang saya buat untuk jawaban saya.
JJS
Jauh lebih baik ... :)
DavidPostill
-1

Daftar semua file, kosong, secara rekursif, menggunakan atribut (bukan direktori) (hanya file)

dir / B / S / A: -D

C: \ test \ cache> dir / B / S / A: -D

C: \ test \ cache \ 7 \ 0f \ 7b50ed0522645513da90345120eaf0f7 C: \ test \ cache \ d \ 23 \ 814644aa6a8195c91e54d2f7bb64e23d

Brandon Hunt
sumber
Pertanyaannya mengatakan bahwa OP “mencoba hanya mendapatkan nama file (tidak ada ekstensi atau jalur file). ... Tapi ketika saya [mencoba dir /b /s] memindai secara rekursif, saya juga mendapat path file sebelum nama file, yang tidak saya inginkan. ”Jadi, Anda memberi tahu OP untuk mencoba variasi yang sepele tentang apa yang telah mereka coba, dan jawaban Anda menunjukkan bahwa ia menghasilkan hasil yang sama seperti ketika OP mencobanya (yaitu, bukan apa yang mereka inginkan).
Scott