Bir toplu iş komut dosyasıyla dizindeki her dosyaya bir şey nasıl yapılır


265

.Bat veya .cmd uzantılı bir dizindeki her dosyayı nasıl yineleyebilirsiniz?

Basit olması için lütfen sadece dosya adını veya dosya yolunu yansıtan bir cevap verin.

Yanıtlar:


348

Komut satırı kullanımı:

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

Toplu dosya kullanımı:

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

Güncelleme : Dizin adlarda boşluk içeren dosyalar içeriyorsa, for /fkomutun kullandığı ayırıcıyı değiştirmeniz gerekir . örneğin, boru karakterini kullanabilirsiniz.

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

Güncelleme 2 : (orijinal cevaptan bir buçuk yıl sonra :-)) Dizin adının kendisinin adında bir boşluk varsa, aşağıdaki usebackqseçeneği kullanabilirsiniz for:

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

Çıktı yeniden yönlendirmesi veya komut borulaması kullanmanız gerekiyorsa escape char ( ^) yöntemini kullanın :

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

3
En azından bazı komutlar için, dosya değişkeni çift tırnak içine alınmalıdır.
Jirka

1
Neden /fihtiyaç duyulur for? Yardım belgelerine göre, /fbayrak açılır ve her dosyayı okur. Dosyaları yankılamak veya yeniden adlandırmak için gerekli mi?
Snekse

17
/fSonra FORdosyalarına bunu kısıtlar. Benzer şekilde, /ddizinlerle (klasörler) kısıtlanır ve /rözyinelemeli olması için talimat verir.

3
+1 Bu sürekli bir katılımdır; çok teşekkürler.
Sabuncu

4
Sadece geri tırnak kullanmak zorunda fark ... Bunun yerine 'dir /b "c:\program files"'olmalı`dir /b "c:\program files"`
endavid

101

Alternatif olarak şunları kullanın:

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

Forfiles komutu Windows Vista ve sonraki sürümlerde kullanılabilir.


1
2. cmd kabuğunda boşluklu yollar kullanmak zordu. Sonunda işi yapmak için% PATH% env var ayarını yaptım. Ama teşekkürler. yararlı
twobob

70

En kolay yöntem:

Komut Satırından şunu kullanın:

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

Bir Toplu Dosyadan (yüzde işaretlerini ikiye katlayın):

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

Klasör 1. parametre olarak belirtilen bir Toplu İş Dosyasından:

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

8
sadece en kolay değil, aynı zamanda dir /Bçıktı değerlendirmesine kıyasla önemli ölçüde daha zarif for.
syneticon-dj


35

kullanım

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

ile:

  • yol başlangıç ​​yoludur.
  • %% var bazı tanımlayıcılar.
  • *. * bir filemask VEYA bir değişkenin içeriği.
  • some_command, yolla yürütülecek komuttur ve parametre olarak birleştirilmiş var.

2
Hatayı alıyorum: %%var was unexpected at this time.Kesin bir örnek verebilir misiniz? Bir sürü varyasyon denedimfor /r . %%var in (*.*) do echo %%var
hippietrail

3
Garip bir nedenle değişken adı bir karakterle sınırlıdır.
ollb

2
Farklı sonuçlar için farklı suratlar kullanabilir miyiz?
Silver Quettier


-1

Bir dizindeki tüm dosyaları gizli / sistem / salt okunur olarak işaretleyen bazı kötü amaçlı yazılımlarım vardı. Bu durumda başka biri kendini bulursa, dizine cd ve çalıştırın for /f "delims=|" %f in ('forfiles') do attrib -s -h -r %f.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.