Windows için “rm -rf” eşdeğeri?


509

Bir klasörü ve alt öğelerini özyinelemeli olarak silmek için bir yola ihtiyacım var.

Bunun için önceden oluşturulmuş bir araç var mı yoksa bir tane yazmam gerekiyor mu?

DEL /S dizinleri silmez.

DELTREE Windows 2000'den kaldırıldı


1
Del / s (a) hiç çalışmıyor mu (yalnızca bazı sürümlerde mevcuttur) veya (b) üst düzey dizinden ayrılıyor ancak altındaki her şeyi siliyor veya (c) tüm dosyaları silerken tüm dizinlerden ayrılıyor mu?
wnoise

@Aaron, cevap c, dizinleri ve dosyaları kaldırmak için rmdir / s kullanmanız gerekir.
Kama

31
Gerçekten format c:Linux kurulumu değil mi? Şaka yapıyorum elbette.
Basile Starynkevitch

Yanıtlar:


694

Klasik Komut İstemi (cmd.exe) kullanıyorsanız RMDIR veya RD:

rd /s /q "path"

RMDIR [/ S] [/ Q] [sürücü:] yol

RD [/ S] [/ Q] [sürücü:] yol

/ S Dizinin kendisine ek olarak, belirtilen dizindeki tüm dizinleri ve dosyaları kaldırır. Bir dizin ağacını kaldırmak için kullanılır.

/ Q Sessiz mod, / S ile bir dizin ağacını kaldırmak için sorun olup olmadığını sorma

PowerShell kullanıyorsanız kullanabileceğiniz Remove-Item(takma adlı edildiği üzere del, erase, rd, ri, rmve rmdir) ve bir sürer -Recursekısa edilebilir argüman-r

rd -r "path"

84
Çok sayıda dosya için rmdir / s / q'nun explorer'daki eşdeğer "select dir, shift + delete" işleminden önemli ölçüde daha hızlı olduğunu belirtmek gerekir.
Kama

9
Bu, rm -rf gibi dosyaları silmez ve dizin olmadığında da sıfırdan farklı bir değer döndürür, bu nedenle rd /s /q foo && echo "yay""foo" dizini yoksa başarısız olur.
Dirk Groeneveld

17
Ya dir. boş değil ve bazı dosyalar olsun Access is deniedve diğerleri The process cannot access the file because it is being used by another process?
Eugene

6
Ben sadece yedi denedim ve yapmanız gereken / S ve / Q (kapaklar)
ford prefect

2
Burada gizemli. Ben biliyorum ben bu komutu çalıştı ve dizin ağacındaki dosyalar olsaydı o işe yaramadı; şimdi geri dönüyorum ve. . . sihirli bir şekilde çalışıyor gibi görünüyor. Başka kimse bununla tutarsız bir davranış yaşar mı ?!
Alex Hall

139

yönetici:

takeown /r /f folder
cacls folder /c /G "ADMINNAME":F /T
rmdir /s folder

Sys dosyaları dahil her şey için çalışır

EDIT: Aslında dosya yolu da çok uzun sorunu da çözen en iyi yolu buldum:

mkdir \empty
robocopy /mir \empty folder

3
Benim kahramanım! Ve bir ipucu: Boş klasörünüzü C: \ empty'da oluşturursunuz, sonra her çılgın klasörün içine bir kez girebilirsinizrobocopy /mir c:\empty .
Léon Pelletier

takeownYanlışlıkla rsync Linux sisteminden klasörü kopyalanan ve o klasörü kaldırmak için hiçbir ayrıcalık vardı bana yardımcı oldu ... Bile robocopy çalıştı. Teşekkürler
Jarda

1
Çok güzel bir cevap. İşe yarıyor. (sayfadaki diğer yanıtların hiçbiri yoktur). Ancak cacls kullanımdan kaldırıldı. Çağdaş bir cevap vermek mümkün mü lütfen? İkinci varyant zaten çalışıyor ve kullanılmıyor.
Gangnus

Bu benim için hiçbir şey yapmaz. Birisi nasıl çalışması gerektiğini açıklayabilir mi? (robocopy) - Klasörlerin içeriğini silebilir, ancak klasörlerin kendisini silmez
Ralf

114

RMDIR [/S] [/Q] [drive:]path

RD [/S] [/Q] [drive:]path

  • /S Dizinin kendisine ek olarak, belirtilen dizindeki tüm dizinleri ve dosyaları kaldırır. Bir dizin ağacını kaldırmak için kullanılır.

  • /Q Sessiz mod, bir dizin ağacını kaldırmak için tamam olup olmadığını sorma /S


13
Parametre açıklaması için teşekkürler. Kabul edilen cevap maalesef bunu yapmıyor.
Thomas

1
Soruya en basit, mükemmel cevap. Kabul edilen olmalı.
Artif3x


19

Yola gidin ve bu komutu tetikleyin.

rd /s /q "FOLDER_NAME"

/ s: Belirtilen dizini ve dosyalar dahil tüm alt dizinleri kaldırır. Bir ağacı kaldırmak için / s tuşunu kullanın.

/ q: rmdir komutunu sessiz modda çalıştırır. Onay almadan dizinleri siler.

/? : Komut isteminde yardımcı olur.


9

Bir dizini silmek için (mevcut olsun ya da olmasın) aşağıdakileri kullanın:

if exist myfolder ( rmdir /s/q myfolder )


6

Kabul edilen cevap harika, ancak Düğümün kurulu olduğunu varsayarsak, bunu daha kesin bir şekilde, globbing desenlerine izin veren düğüm kenarı "rimraf" ile yapabilirsiniz. Bunu çok kullanırsanız (kullanıyorum), sadece küresel olarak yükleyin.

yarn global add rimraf

örneğin, sürekli kullandığım bir kalıp:

rimraf .\**\node_modules

veya genel yüklemeden kaçmanıza izin veren, ancak paket dinamik yüklemesi için biraz daha uzun süren bir astar için:

npx rimraf .\**\node_modules

2
OS-agnostik olduğu için soruna sağlam bir çözüm.
Denialos

5

Bu komutu deneyin:

del /s foldername

w / rmdir / s / q ile birlikte benim için çalıştı bazı dosyalar kilitli ve rmdir bu başarısız olur. del / foldername, rmdir'in kök dizininden kurtulmasına izin veren kilitli dosyaları nuked etti. Güzel.
bbqchickenrobot


4

İlk olarak, ne yaptığını gözden geçirelim rm -rf:

C:\Users\ohnob\things>touch stuff.txt

C:\Users\ohnob\things>rm -rf stuff.txt

C:\Users\ohnob\things>mkdir stuff.txt

C:\Users\ohnob\things>rm -rf stuff.txt

C:\Users\ohnob\things>ls -l
total 0

C:\Users\ohnob\things>rm -rf stuff.txt

rm -rfGeri dönmesi beklenen yerlerde yaygın olarak kullanılan üç senaryo vardır 0:

  1. Belirtilen yol mevcut değil.
  2. Belirtilen yol var ve bir dizin.
  3. Belirtilen yol var ve bir dosya.

Tüm izinleri göz ardı edeceğim, ancak kimse izinleri kullanmıyor ya da Windows'taki şeylere yazma erişimini reddetmeye çalışmıyor (Tamam, bu bir şaka demekti…).

Önce 0 olarak ayarlayınERRORLEVEL ve sonra dizin olup olmadığına bağlı olarak farklı komutlar kullanarak yolu yalnızca varsa silin. yol yoksa 0'a IF EXISTayarlanmaz ERRORLEVEL, bu nedenle ERRORLEVELbaşarıyı normal rm -rfkullanımı taklit edecek şekilde doğru bir şekilde algılamak için önce 0'a ayarlamak gerekir . Koruma RDile IF EXISTçünkü gerekli RDaksine, rm -fhedef yoksa, bir hata verir.

Aşağıdaki komut dosyası snippet'i DELPATH'in önceden alıntılandığını varsayar. (Böyle bir şey yaptığınızda güvenlidir SET DELPATH=%1. ECHO %1Bir .cmdboşluk koymayı ve içinde boşluklar olan bir argüman iletmeyi deneyin ve kendiniz için neler olduğunu görün). Snippet tamamlandıktan sonra, ile hata olup olmadığını kontrol edebilirsiniz IF ERRORLEVEL 1.

: # Determine whether we need to invoke DEL or RD or do nothing.
SET DELPATH_DELMETHOD=RD
PUSHD %DELPATH% 2>NUL
IF ERRORLEVEL 1 (SET DELPATH_DELMETHOD=DEL) ELSE (POPD)
IF NOT EXIST %DELPATH% SET DELPATH_DELMETHOD=NOOP
: # Reset ERRORLEVEL so that the last command which
: # otherwise set it does not cause us to falsely detect
: # failure.
CMD /C EXIT 0
IF %DELPATH_DELMETHOD%==DEL DEL /Q %DELPATH%
IF %DELPATH_DELMETHOD%==RD RD /S /Q %DELPATH%

Mesele şu ki, ortam POSIX ile uyumlu olduğunda her şey daha basittir. Veya minimal bir MSYS yüklerseniz ve bunu kullanırsanız.



3

Yapman gerekenler işte burada...

Aşağıdaki satırla bir toplu iş dosyası oluşturun

RMDIR /S %1

Toplu iş dosyanızı farklı olarak kaydedin Remove.batve içine koyunC:\windows

Aşağıdaki kayıt defteri anahtarını oluşturun

HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)

regeditVarsayılan değeri HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)\default aşağıdaki değerle başlatın ve güncelleyin

"c:\windows\REMOVE.bat" "%1"

Bu kadar! Artık herhangi bir dizine sağ tıklayıp RMDIR işlevini kullanabilirsiniz


3

Powershell 5.1'i kullanma

 get-childitem *logs* -path .\ -directory -recurse | remove-item -confirm:$false -recurse -force

Günlükleri , silmek istediğiniz dizin adıyla değiştirin .

get-childitem , geçerli dizinden (.) özyinelemeli adla children dizinini arar.

öğe kaldır , sonucu siler.


2

GnuWin32'yi yükleyebilir ve * nix komutlarını yerel olarak pencerelerde kullanabilirsiniz. Bunu, nane yeni bir pencere kopyasına başka bir şey yüklemeden önce yüklüyorum. :)


2

KENDİ RİSKİNİZDE KULLANIN. 'OLDUĞU GİBİ' VERİLEN BİLGİLER. GENİŞLETİLMEMİŞTİR.

Windows simgesine sağ tıklayın (genellikle sol altta)> "Windows PowerShell (Yönetici)" seçeneğine tıklayın> bu komutu kullanın (dikkatli değilseniz, dikkatli değilseniz tüm dosyalarınızı kolayca silebilirsiniz):

rd -r -include *.* -force somedir

somedirKaldırmak istediğiniz boş olmayan dizin nerede .

Harici bağlı disklerde veya sorunlu disklerde, Windows'un bazen garip davrandığını unutmayın; silme işleminde (veya herhangi bir kopyalama girişiminde) hata oluşmaz, ancak dizinin belirtildiği gibi silinmez (veya kopyalanmaz). (Bu durumda, en azından benim için, @n_y tarafından verilen komutta verilen komutun 'get-childitem: Dosya veya dizinin bozuk ve okunamaz olması' gibi hatalar üreteceğini buldum.)


1

GEÇMİŞ AMA ÖNEMLİ CEVAP npm takan herkes için CEVAP Windows makinede paketleri ve " rm -rf..." komutu bulunamadı hatası görüyorsanız . Windows'ta rm komutunu çalıştırmak için bash cli'yi kullanabilirsiniz .

npm kullanıcıları için, npm config set script-shell "C:\Program Files\Git\bin\bash.exe"yüklemeye çalıştığınız npm paketinde aşağıdakileri kullanan bir yükleme sonrası komut dosyası varsa, npm'nin yapılandırmasını bu şekilde değiştirebilirsiniz.rm -rf varsa rm, npm paketindeki hiçbir şeyi değiştirmeden veya devre dışı bırakmadan bu komutu çalıştırabilirsiniz. yükleme sonrası komut dosyaları yapılandırma. (Örneğin, yükleme sonrası komut dosyalarında komut styled-componentskullanır rm)

Sadece rmkomutu kullanmak istiyorsanız, bash'ı kolayca kullanabilir ve argümanları iletebilirsiniz.

Yani evet, pencerelerde 'rm' komutunu kullanabilirsiniz.


0

İşte benim için işe yarayan:

Sadece yolun uzunluğunu azaltmayı deneyin. ie :: Böyle bir dosyaya yol açan tüm klasörleri mümkün olan en küçük adlarla yeniden adlandırın. Bir harf adı söyleyin. Klasör hiyerarşisinde yukarı doğru yeniden adlandırmaya devam edin. Bu yolla etkili bir şekilde yol uzunluğunu azaltır. Şimdi dosyayı hemen silmeyi deneyin.



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.