Cara melakukan sesuatu untuk setiap file dalam direktori dengan skrip batch


265

Bagaimana Anda mengulangi setiap file dalam direktori dengan file .bat atau .cmd?

Untuk mempermudah, berikan jawaban yang hanya menyuarakan nama file atau path file.

Jawaban:


348

Penggunaan baris perintah:

for /f %f in ('dir /b c:\') do echo %f

Penggunaan file batch:

for /f %%f in ('dir /b c:\') do echo %%f

Pembaruan : jika direktori berisi file dengan ruang dalam nama, Anda perlu mengubah pembatas yang digunakan for /fperintah. misalnya, Anda bisa menggunakan pipa char.

for /f "delims=|" %%f in ('dir /b c:\') do echo %%f

Pembaruan 2 : (cepat satu setengah tahun setelah jawaban asli :-)) Jika nama direktori itu sendiri memiliki ruang dalam nama, Anda dapat menggunakan usebackqopsi pada for:

for /f "usebackq delims=|" %%f in (`dir /b "c:\program files"`) do echo %%f

Dan jika Anda perlu menggunakan pengalihan output atau pemipaan perintah, gunakan karakter escape ( ^):

for /f "usebackq delims=|" %%f in (`dir /b "c:\program files" ^| findstr /i microsoft`) do echo %%f

3
Setidaknya untuk beberapa perintah, variabel file harus dilampirkan dalam tanda kutip ganda.
Jirka

1
Mengapa yang /fdibutuhkan setelah itu for? Menurut dokumen bantuan, /fbendera terbuka dan membaca setiap file. Apakah itu perlu dilakukan gema atau ganti nama file?
Snekse

17
The /fsetelah FORmembatasi ke file. Demikian pula, /dmembatasi ke direktori (folder) dan /rmemerintahkannya untuk bersifat rekursif.

3
+1 Ini adalah jawaban yang hidup, terus diperhatikan; terimakasih banyak.
Sabuncu

4
Baru sadar Anda harus menggunakan kembali kutipan ... Alih-alih 'dir /b "c:\program files"'seharusnya`dir /b "c:\program files"`
endavid

101

Atau, gunakan:

forfiles /s /m *.png /c "cmd /c echo @path"

Perintah forfiles tersedia di Windows Vista dan yang lebih tinggi.


1
sulit menggunakan jalur dengan spasi di shell cmd ke-2. Pada akhirnya saya menyesuaikan% PATH% env var untuk menyelesaikan pekerjaan. Tapi terima kasih. membantu
twobob

70

Metode termudah:

Dari Command Line, gunakan:

for %f in (*.*) do echo %f

Dari File Batch (gandakan tanda% persen):

for %%f in (*.*) do echo %%f

Dari File Batch dengan folder yang ditentukan sebagai parameter 1:

for %%f in (%1\*.*) do echo %%f

8
tidak hanya termudah, tetapi juga secara signifikan lebih elegan dibandingkan dengan mengevaluasi dir /Boutput dengan for.
syneticon-dj

5
Tambahkan a / r sebelum% f untuk
mengulangi

35

Menggunakan

for /r path %%var in (*.*) do some_command %%var

dengan:

  • jalur menjadi jalur awal.
  • %% var menjadi pengenal.
  • *. * menjadi filemask ATAU isi variabel.
  • some_command menjadi perintah untuk dieksekusi dengan path dan var digabung sebagai parameter.

2
Saya mendapatkan kesalahan: %%var was unexpected at this time.Bisakah Anda memberikan contoh yang tepat? Saya mencoba banyak variasifor /r . %%var in (*.*) do echo %%var
hippietrail

3
Untuk beberapa alasan aneh, nama variabel dibatasi untuk satu karakter.
ollb

2
Bisakah kita menggunakan smiley yang berbeda untuk hasil yang berbeda?
Silver Quettier


-1

Saya memiliki beberapa malware yang menandai semua file dalam direktori sebagai hidden / system / readonly. Jika orang lain menemukan diri mereka dalam situasi ini, masuk ke direktori dan jalankan for /f "delims=|" %f in ('forfiles') do attrib -s -h -r %f.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.