Rmdir veya rd komutuyla joker karakterleri kullanma


40

Diyelim ki D:sürücüde bir klasör var :

D:\Air
D:\Abonden
D:\All
D:\Whatever

"A" ile başlayan tüm klasörleri silmek istiyorum (tüm alt klasörler ve dosyalar dahil). Bu komutu denedim:

rmdir D:\A* /s /q

Yine de bir hata alıyorum :(

Dosya adı, dizin adı veya birim etiketi sözdizimi hatalı.

delKomut ile çalışır *, ama sıra klasörleri silmek gerekir.
Bunu rmdirkomutla elde etmenin bir yolu var mı ?


2
Tekdüzelik ve sağduyu, Windows veya DOS komut kabuklarının geliştirilmesinde hiçbir zaman oyunda olmadı. Üzücü kısmı, bu kabukların geliştirildiği zaman akıllı tasarımlara ışık tutacak model sistemlerdi. Elbette, kabuk, bu çöpleri bir araya getiren, varolmayan düşünce sürecinin sadece bir örneği - keşke size gerçekten ne düşündüğümü söyleyebilseydim, ha ha.
Rick O'Shea,

Yanıtlar:


33
cd c:\temp
for /f %i in ('dir /a:d /s /b A*') do rd /s /q %i

Bunu test etmek için bunu kullanın:

for /f %i in ('dir /a:d /s /b A*') do echo rd /s /q %i

Bu, komut isteminde çalıştırılacak komutları dağıtır ve neler olduğunu görmenize olanak sağlar.

Bunun, "C: \ temp \ jjj \ aaa" gibi alt klasörleri de arayacağını ve aaa klasörünü sileceğini unutmayın. Yalnızca "C: \ temp \ aaa" en üst düzeydeki klasörlere bakmasını istiyorsanız "/s", komutu komuttan kaldırın .

Bunun anahtarı, arama dizginize koyacağınız A * 'dır. Bu şekilde joker böyle kabul edecek aaa*, aaa*ve *aaa*bunu istiyorum.


Gibi, yol / klasör adı boşluk karakterleri içeriyorsa, komut kesilecektir.
ve31415,

1
A * için "EFO’ya GİDERMEMELİ" ekleyebilir miyiz?
serdar

3
Bu, yolun boşluk karakterleri içermesi durumunda işe yarar: / f "delims ="% i in ('dir / a: d / s / b A *') rd / s / q "% i" yapın
Luis Cantero - MSFT

5
Bunu bir toplu iş dosyasından çalıştırıyorsanız , komutun gerçekleşmesi için yüzde iki işaret kullanmanız gerektiğini eklemek isterimfor /f %%i in ('dir /a:d /s /b A*') do rd /s /q %%i
Fred Clausen

'w / sub'
flagını

25

Joker karakterleri kullanarak klasörleri silme

rmdir/ rdKomut yalnız desteklemediği joker karakterleri (yani, *ve ?). Bu sınırlamayı geçici olarak sararak kapatabilirsiniz for.

Örnek kullanım

for /d %G in ("X:\A*") do rd /s /q "%~G"

Not Dosya ve klasörleri silerken, önce rdkomutu yerine koymak isteyebilirsiniz echo. Bu sayede silinmemesi gereken her şeyin gerçekten olmasını sağlayabilirsiniz.

Çoklu desenler

Farklı desenlerle eşleşen birden fazla klasörü silmek için sözdizimi çok farklı değildir. @Dbenham'ın doğru bir şekilde işaret ettiği gibi, tek satırlık bir komut yeterlidir. Ayrıca farklı yollar belirleyebilirsiniz:

for /d %G in ("X:\A*","Y:\Whatever\B*","Z:\C?D") do rd /s /q "%~G"

Bonus - Klasör varlığının kontrol edilmesi

Belirli klasörlerin olup olmadığını kontrol etmek istiyorsanız, aşağıdaki komutu kullanabilirsiniz:

dir /b /a:d "X:\A*" >nul 2>&1 && echo Folders exist. || echo No folders found.

daha fazla okuma


A * için "EFO’ya GİDERMEMELİ" ekleyebilir miyiz?
serdar

Örneğin, A harfiyle başlayan bir klasör olmadığını varsayalım. Öyleyse komut B * için gitmeli. Açıklayabilir miyim yoksa bilmiyorum :(
serdar

1
Benden +1. Aşağı oyu anlamıyorum. Basit FOR /Dve FOR /D /Rkomutlarınızla birden fazla desen yapabilirsiniz . Basitçe kullan in( "A*" "B*" "C?D" ).
dbenham

1
Aslında /Rseçeneğe ihtiyacınız var çünkü maskeyle eşleşen alt klasör, uymayan bir ebeveynin altında olabilir.
dbenham

5
UYARI: Eğer bir .bat dosyasında bu çözümü kullanmak istiyorsanız, %% G yerine% G kullanmak zorunda bkz burada
ValarDohaeris

18

Henüz kimse OP'ye forfiles'ten bahsetmedi ?!

forfiles /P D:\ /M A* /C "cmd /c if @isdir==TRUE rmdir /s /q @file"

/ P yol adıdır - aramanın başladığı yer
/ M, A ile başlayan dosyaları arayan arama maskesidir.
/ C çalıştırılacak komut
/ S özyinelemeli alt klasörlerdir (buraya sormadı çünkü op sormadı)

2
Bu mükemmel bir cevap, kabul edilebilir olmalı.
eacousineau

1
Çok iyi bir çözüm ve iyi açıkladı.
Andreas,

Yararlı cevap: D, ancak IMO’nun and31415’in cevabındakifor /d gibi hem daha temiz hem de daha verimli olduğunu.
Superole,

12

adn31415 cevabı doğrudur, ancak bir toplu iş veya cmd komut dosyasına koyarsanız kırılır. Nasıl kullandığınızı bulana kadar saatlerce kafamı çarptım.

DOS komut penceresinde:

for /d %G in ("X:\A*") do rd /s /q "%~G"

Toplu iş veya cmd komut dosyasında:

for /d %%G in ("X:\A*") do rd /s /q "%%~G"

Bir ".bat" veya ".cmd" dosyasına koymak istiyorsanız, "%" karakterlerini ikiye katlamanız gerekir.


3
Batch betiği için zamanımı kurtardın!
Tuan,

sorun yok ahbap :) Bu yüzden cevabı açıkça belli olmadığını ve daha fazla insanın içine gireceğini bildiğim için gönderdim.
Sam B,

Silinmemesi için bir hariç tutma ekleyebilir miyiz?
serdar

SET / P PC = IP VEYA ANA ADI GİRİŞİ / d %% a in ("\\% PC% \ D $ \ A *. *") Rd / s / q yapın "%% a" Bu scritpt düzgün çalışıyor mu ?
serdar
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.