it-swarm-tr.com

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

Bir klasörü ve alt dosyalarını yinelemeli olarak silmek için bir yola ihtiyacım var.

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

DEL /S dizinleri silmez.

DELTREE, Windows 2000+ sürümünden kaldırıldı

429
FlySwat

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

rd /s /q "path"

PowerShell kullanıyorsanız Remove-Item (del, erase, rd, ri, rm, rmdir] olarak kullanabilirsiniz. ve -Recurse ile kısaltılabilen bir -r argümanı alır

rd -r "path"
594
Duncan Smart

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 yolunu da çözen en iyi yolu buldum.

mkdir \empty
robocopy /mir \empty folder
128
wbkang

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

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

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

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

105
Jim McKeeth

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 kullanın.

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

/? : Komut isteminde yardımcı olur.

18

rm ve ls vs. olan cygwin'i yükleyebilirsiniz.

18
user17481

Bir dizini silmek için (var olup olmadığını) aşağıdakileri kullanın:

if exist myfolder ( rmdir /s/q myfolder )
6
Clay

rmdir /S /Q %DIRNAME%

5
Branan

rmdir/s dirname

3
Brian Mitchell

Bu komutu dene:

del /s foldername
3
Jeremy Ruten

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

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 -rf öğesinin yaygın olarak kullanıldığı, 0 dosyasının döndürülmesi beklenen üç senaryo vardır:

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

Tüm izinler konusunu görmezden geleceğim, ancak hiç kimse izinleri kullanmıyor ya da Windows'taki şeylere kendileri için yazma erişimini reddetmeye çalışmıyor (Tamam, şaka olması gerekiyor…).

İlk önce ERRORLEVEL değerini 0'a ayarlayın ve sonra varsa, dizini olup olmadığına bağlı olarak farklı komutlar kullanarak yolu silin. IF EXIST, yol mevcut değilse ERRORLEVEL değerini 0'a ayarlamaz, bu nedenle, normal rm -rf kullanımını taklit edecek şekilde başarıyı doğru şekilde algılamak için ERRORLEVEL değerini 0 olarak ayarlamak gerekir. RDIF EXIST ile korumak, çünkü RD, rm -f'dan farklı olarak, eğer hedef mevcut değilse, bir hata atar.

Aşağıdaki komut dosyası snippet'i, DELPATH’nin öntanımlı olduğunu varsayar. (SET DELPATH=%1 gibi bir şey yaptığınızda güvenlidir. ECHO %1.cmd içine yerleştirmeyi ve içinde boşluk bulunan bir argüman iletmeyi deneyin ve kendiniz için ne olduğunu görün.) Snippet tamamlandıktan sonra, IF ERRORLEVEL 1 ile arızayı kontrol edebilirsiniz.

: # 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 sadece POSIX ile uyumlu olduğunda her şey daha basit. Veya en az bir MSYS yüklerseniz ve onu sadece kullanırsanız.

3
binki

Yapman gerekenler işte burada...

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

RMDIR /S %1

Toplu iş dosyanızı Remove.bat olarak kaydedin ve C:\windows içine yerleştirin

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

HKEY_CLASSES_ROOT\Directory\Shell\Remove Directory (RMDIR)

regedit dosyasını başlatın ve varsayılan değer HKEY_CLASSES_ROOT\Directory\Shell\Remove Directory (RMDIR)\default değerini aşağıdaki değerle güncelleyin

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

Bu kadar! Artık herhangi bir dizine sağ tıklayabilir ve RMDIR işlevini kullanabilirsiniz.

2
Louis

GnuWin32 yükleyebilir ve * nix komutlarını yerel olarak pencerelerde kullanabilirsiniz. Bunu, kırk yeni pencere kopyasına başka bir şey yüklemeden önce yüklerim. :)

2
epochwolf

Kabul edilen cevap harika, ancak Düğümün kurulu olduğunu varsayarsak, bunu daha kesin bir şekilde, “kabartma desenleri sağlayan“ rimraf ”düğüm kütüphanesiyle yapabilirsiniz. Çok kullanıyorsanız (ben yaparım), sadece global olarak kurun.

yarn global add rimraf

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

rimraf .\**\node_modules

veya global yüklemeden kaçınmanıza izin veren, ancak dinamik indirme paketi için biraz daha uzun süren bir liner için:

npx rimraf .\**\node_modules
1
Artif3x

Powershell 5.1 Kullanımı

 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 ismi ile alt dizinleri geçerli yoldan (.) tekrarlayan alt dizini arar.

remove-item sonucu siler.

1
n_y

KULLANIMI AT KENDİ RİSKİNİZ. 'OLDUĞU GİBİ' BİLGİSİ. FAZLA TEST EDİLMEMİŞTİR.

Windows simgesini sağ tıklayın (genellikle sol altta)> "Windows PowerShell (Yönetici)"> tıklayın ve bu komutu kullanın (dikkatli olmanız durumunda dikkatli olmanız durumunda tüm dosyalarınızı kolayca silebilirsiniz):

rd -r -include *.* -force somedir

somedir, kaldırmak istediğiniz boş olmayan dizin olduğunda.

Dışa takılı disklerde veya sorunlu disklerde, Windows'un bazen tuhaf davrandığını unutmayın - silme işleminde (veya herhangi bir kopyalama girişiminde hata olmaz), ancak dizin belirtildiği şekilde silinmez (veya kopyalanmaz). (Bu durumda, en azından benim için cevabında @ n_y tarafından verilen komutun 'get-childitem: Dosya veya dizin bozuk ve okunamaz durumda' gibi hatalar üreteceğini gördüm.)

0
Roel

powershell üzerinden

 Remove-Item -Recurse -Force "TestDirectory"

komut İstemi ile

https://stackoverflow.com/a/35731786/4391

0
cilerler

i̇şte benim için çalıştı ne:

Sadece yolun uzunluğunu azaltmayı deneyin. i.e :: Böyle bir dosyaya yönlendiren tüm klasörleri olası en küçük isimlere göre yeniden adlandırın. Bir harf adı söyle. Klasör hiyerarşisinde yeniden adlandırmaya devam edin. Bu sayede yol uzunluğunu etkili bir şekilde azaltın. Şimdi nihayet dosyayı hemen silmeyi deneyin.

0
Gaurav Deochakke