Pertanyaan lain dari pengguna lama Unix / Linux yang menemukan dirinya di dunia Windows. Pertama, izinkan saya menjelaskan apa yang saya coba lakukan. Saya menggunakan shell Windows cmd.exe, dan saya ingin daftar semua direktori di bawah direktori saat ini yang berisi hirarki bin \ Debug, dan menentukan apakah mereka berisi file (misalnya: mencoba mencari tahu apakah target bersih NAnt saya adalah bekerja dengan baik). Hirarki saya mungkin terlihat seperti ini:
\Current
\DirA
\bin
\Debug
(some files under debug)
\Release
\DirB
\bin
\Debug
\DirC
\bin
\Release
Di Unix, ls */bin/Debug
hanya akan memberi saya daftar semua barang di DirA/bin/Debug
, dan tunjukkan fakta yang DirB/bin/Debug
kosong. Saya sudah mencoba berbagai contortions di shell cmd, tetapi tetap tutup dengan hal-hal seperti:
> dir * \ bin \ Debug Nama file, nama direktori, atau sintaks label volume tidak benar. > dir * \ * \ * Nama file, nama direktori, atau sintaks label volume tidak benar.
Apakah ada sesuatu yang halus yang saya tidak mengerti tentang perintah dir, atau apakah hanya sebatas itu?
Ya, saya sadar bahwa saya bisa beralih ke explorer, navigasi, klik kanan, dan mungkin akhirnya membuat pencarian yang melakukan apa yang saya inginkan, tetapi saya lebih tertarik dengan solusi baris perintah quick-n-dirty.
sumber
Jawaban:
Sesuatu seperti ini harus melakukan apa yang Anda inginkan. Di direktori root dari jenis proyek:
Argumen Dir: / s - rekursif, / b - "bare", tidak ada info tambahan
argumen findstr: / i - abaikan case
Secara umum, ' perintah bantuan ' akan menunjukkan bantuan untuk perintah shell. Jika itu tidak berhasil, maka
' perintah /?' biasanya akan menunjukkan bantuan.
sumber
Windows tidak melakukan wildcard seperti Linux. Hanya bagian nama file yang dapat berisi wildcard.
Anda dapat mengunduh versi ls yang berjalan di Windows dan menggunakannya. Saya sudah menggunakan Cygwin , tapi saya yakin ada yang lain.
sumber
unxutils memiliki perintah ls. Masalahnya sebenarnya dengan shell windows. Pada unix shell Anda akan memperluas
*/bin/Debug
ke nama path yang relevan dan memberi mereka ke perintah ls sebagai argumen baris perintah yang terpisah.Cygwin pasti akan melakukan trik untuk Anda, atau Anda bisa mencoba port windows dari shell unix seperti bash . Jika Anda ingin pergi rute scripting, Anda bisa membuat kode sesuatu dengan python cukup mudah menggunakan modul glob , dan sebagian besar bahasa scripting lainnya memiliki yang setara.
sumber
Anda dapat melakukan sesuatu seperti "dir / s * .obj * lib". Ini akan memberikan ringkasan di akhir berapa banyak file yang cocok.
sumber
Tidak bagus, tetapi harus bekerja. Anda juga dapat memasukkan ke dalam file .cmd (lalu ganti setiap% menjadi double %%). Atau tentukan makro menggunakan doskey (ya, itu masih ada).
Pastikan ekstensi cmd diaktifkan.
EDIT: Cara kerjanya:
Yang pertama untuk loop berulang melalui semua subdirektori (/ D dan / r switch) secara iteratif. % ~ fP memperluas ke path lengkap dari direktori itu. Kemudian, itu menambahkan \ bin \ Debug * ke jalur itu. Yang kedua untuk loop menyebutkan semua file yang cocok. % ~ ftzaQ diperluas ke setiap file yang cocok dan dicetak ke layar oleh gema. % ~ FtzaQ yang aneh memformatnya seperti keluaran dir. Karakter @ menghindari bahwa perintah itu sendiri dicetak di layar.
Untuk lebih lanjut, lihat
sumber
Di dunia Windows cmd.exe tidak memperluas wildcard - mereka bisa dilewatkan apa adanya ke program di baris perintah atau array argv. Karenanya setiap program mem-parsing dan memperluasnya secara berbeda, dan beberapa penggunaan yang lebih maju (seperti yang Anda cari) umumnya tidak didukung.
saran timgilbert untuk menggunakan Cygwin adalah saran yang bagus, juga paket GNUWin32 mungkin memiliki sesuatu yang akan membantu Anda.
sumber