2010-12-07 8 views
7

Şu anda bir klasör kümesinde yinelenen bir .cmd Windows Shell komut dosyası yazmaya çalışıyorum. Ancak, hatta şu basit komut dosyası:Windows Kabuğu'ndaki bir dizi klasörde nasıl yineliyorum?

echo "%ROOT%" 
for %%f in ("%ROOT%\Binaries\") do (
    echo "%%f" 
    if not exist "%%f\Subfolder" 
     md "%%f\Subfolder" 
) 

çıkışları: Yanlış yapıyorum

CurrentDir>echo "<ActualPathToRoot>" 
"<ActualPathToRoot>" 
%f\Subfolder was unexpected at this time 
CurrentDir>if exists "%f\Subfolder" 

? Bu komut dosyasını, bu klasörde yinelemesini ve "Alt klasör" adlı alt klasörün alt klasörü oluşturduğunu gördüğünde nasıl değiştiririm? Ayrıca bu tür senaryoları yazmak için iyi bir öğretici var mı?

cevap

4

Bu benim için çalışıyor: For

echo %ROOT% 
for /D %%f in (%ROOT%\Binaries\*) do echo %%f && if not exist %%f\Subfolder md %%f\Subfolder 
+0

'a gereksinim duyabileceğinizi unutmayın. Hepsi tek satırda mı olmalı? – sharptooth

+0

Evet. En azından benim versiyonumda böyle çalıştı. Belki de bunu birden fazla satırda yapmak için bir yol var, ancak klasik toplu iş dosyaları böyle çalıştı. Ve genellikle insanlar pek çok çizgiye sahip olmak için 'goto' kullanırlardı. – detunized

+0

Çok teşekkürler. Sorun, bu linebreaks'ın önemli olmadığını ummuyordum. – sharptooth

8

(alt) klasör yineleme farklı bir for parametre kullanmak gerekir.

Yani C tüm dizinleri listeye istiyorsanız: Bunu olmalıdır:

for /d %%A in (C:\*) do echo %%A 

Not bir dizin belirten parametre /d. alt dizinleri gitmek için, /r

for /r C:\Windows %%A in (*.jpg) do echo %%A 

ile bu tüm Windows alt dizinleri aracılığıyla yinelerler JPG arayan ediyorum için bir özyinelemeli yapmak gerekir. Düşük olması gereken /d /r ve this reference suggests yapabilmeniz gerekir - Ben sadece yapamam, ama belki bunu yapabilir misin? dir/ad/s/b ile birlikte kullanılır

for /f "delims=" %%A in ('dir /ad/s/b') do echo %%A 

Not bask, dizinlerin bir özyinelemeli listesini gerçekleştirir:

çabuk aşağı jotted bir geçici çözüm sadece döngü için tüm dizinin bir dir yapmaktır dizinlerin isimleri bulundu.
Elinizdeki bu araçlar ile if-subfolder yapınızı yapabilmeniz gerekir.