2012-01-28 12 views
10

Ben klasör B'ye klasör A'dan hangi dosyaları kopyalar bir komut satırı var. Böyle bir dosya listeleyebilirsiniz: çıktı varlık ileWindows'ta komut satırında foreach döngüsü? Şimdi olmayan yinelemeli A'da mevcut B tüm dosyaları silmek istiyorum</p> <pre><code>copy A* B </code></pre> <p>:

dir /b /a-d A 

: Burada

f0.txt 
f1.txt 
f2.txt 

ben yapmak istiyorum ne için yalancı kod geçerli:

foreach $1 in <dir /b /a-d A output>: 
    del B\$1 

var mı Bir komut yürütecek bir komut satırı sözdizimi, giriş olarak başka bir komutun çıktısını kullanarak? Borulama operatörünün (|) farkındayım, ancak bunun bu görevi yerine getirmek için kullanılabileceğini bilmiyorum. Herhangi bir yardım mutluluk duyacaktır.

Kısıtlama: 7.

cevap

12

Ayrıca komutunun çıktısı için üzerinde yineleme çalışırken çok daha sağlamdır

for %x in (*) do ... 

dosyaları adımlayabilirsiniz Sadece Windows'da varsayılan olarak kullanılabilir komutları Bu kullanım durumu. yerine komut satırında bir toplu dosyasında bu gerekiyorsa

Yani

for %f in (A\*) do del "B\%~nxf" 

ya,:

for %%f in (A\*) do del "B\%%~nxf" 

%~nxf döner yalnızca dosya adı ve her bir dosyanın uzantısı beri öyle olacak A\ ile öneklenmiş ve onu silmek istediğinizde B.

Herhangi bir çıktının bastırılması için > nul 2>&1 ekleyin (hata iletilerinde Mevcut olmayan dosyaları silmeyi deneyin).


Sadece şeyiyle

, sen aslında hemen hemen aynı şekilde bir komutun çıktısını adımlayabilirsiniz:

for /f %x in ('some command') do ... 

ama bunu yaparken ile ve yineleme durumunda birkaç sorunlar var dir çıkışı nadiren gerekli, bu yüzden tavsiye etmem. Windows 7'ye olduğundan


Ve siz de PowerShell var:

Get-ChildItem A\* | ForEach-Object { Remove-Item ('B\' + $_.Name) } 

veya daha kısa:

ls A\* | % { rm B\$($_.Name) } 
+1

Eğer hata olmaması için '-erroraction Silentlycontinue' ekleyebilir A’daki bazı dosyalar B’de yok – mjsr

İlgili konular