Toplu iş dosyası. Bir dizindeki tüm dosya ve klasörleri silme


135

Kablosuz araç setim için önbellek klasörümdeki tüm klasörleri ve dosyaları silecek bir toplu iş dosyasına sahip olmak istiyorum.

Şu anda aşağıdakiler var:

cd "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS"
del *.db

Bu benim RMS dizinindeki tüm .db dosyalarını silecektir , ancak bu dizindeki her şeyi silmek istiyorum. Bunu nasıl yapabilirim?


3
Tip del /?istemi de. Bu aracın nasıl kullanılacağı hakkında bilgi verecektir. Bu durumda, del *.* /sişe yarar ama yanlış dizinde yapmayın!
Michael Todd

35
rmdir /s /q c:\users\tbrollo\j2mewtk\2.5.2\appdb\RMS
forsvarir

Doğru oyu değiştirmek için yukarı oy başına önerebilirim
GregM

5
forsvarir'in cevabı RMSdizini de kaldırır , bu amaçlanan olmayabilir. (Aslında ben sık ne yok sonra dizinde ve onu olduğu izinlerden orijinal damgası kaybetmek, çünkü istiyorum.) Bir dizinin tüm içeriğini kaldırmak ancak içinde dizinin kendisini terk etmek nasıl benim yanıta bakın yer.
Bill_Stewart

Yanıtlar:


51

del *.*yerine del *.db. Bu her şeyi kaldıracaktır.


56
Not: "Silmek istediğinizden emin misiniz?" del . /F /Q
Sorusunu

41
bu sadece dosyaları siler - klasörleri değil
icc97

52
Bu doğru yanıt olarak işaretlenmemelidir çünkü klasörleri silmez (soruda belirtildiği gibi).
Bill_Stewart

158

kullanın:

  • Toplu iş dosyası oluşturma

  • Aşağıdaki metni toplu iş dosyasına kopyalayın

    set folder="C:\test"
    cd /d %folder%
    for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
    

Tüm dosya ve klasörleri siler .


4
Harika, aylık toplu iş için dosya ve klasörleri temizlemek için bir şey arıyordum ve bu hile yaptı.
Dave Harding

9
Bunu yapmadan önce dizinin var olduğundan emin olun.
Bill_Stewart

2
Dosya adlarınızda 'özel' karakterler varsa, önce chcp 10000kodlamayı UTF-16 olarak değiştirin
Demelziraptor

3
Sadece Bill_Stewart'ın yorumuna bir not eklemek istiyorum. Dizinin var olduğundan emin olmanızın nedeni, aksi halde, şu anda hangi dizinde bulunduğunuzu temizleyecektir. Benim durumumda, 30 dakikadır üzerinde çalıştığım toplu iş dosyasıydı. :( İyi bir şey klasörün geri kalanı kaynak kontrolü altındaydı.
helios456

2
@vee (rmdir "%%i" /s/q 2>NUL || del "%%i" /s/q >NUL ) hatayı, hata ve silme mesajlarını bastırmak için değiştirin
Carl Walsh

34
IF EXIST "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" (
    rmdir "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" /s /q
)

Bu işlem klasördeki (ve klasörün kendisi) her şeyi silecektir.


13
Bence soru, tüm içeriğin dizinini boşaltmak, ancak dizinin kendisini silmek değil.
Bill_Stewart

16

del *.*yalnızca dosyaları siler, ancak alt dizinleri silmez. Bir dizinin içeriğini tıkamak için bu komut dosyasını kullanabilirsiniz:

@echo off
setlocal enableextensions
if {%1}=={} goto :HELP
if {%1}=={/?} goto :HELP
goto :START

:HELP
echo Usage: %~n0 directory-name
echo.
echo Empties the contents of the specified directory,
echo WITHOUT CONFIRMATION. USE EXTREME CAUTION!
goto :DONE

:START
pushd %1 || goto :DONE
rd /q /s . 2> NUL
popd

:DONE
endlocal

Alt pushddizinini silmek istediğiniz dizinde yapılan değişiklikler. Ardından rd, geçerli dizini ve tüm alt dizinleri silmeyi istediğinde, alt dizinlerin silinmesi başarılı olur, ancak geçerli dizinin silinmesi başarısız olur - çünkü içerideyiz. Bu 2> NULyutan bir hata üretir . (2 hata akışıdır).


6
Bunun tam olarak nasıl çalıştığını merak ettim, bu yüzden diğerleri için bir açıklama olarak: Pushd, çocukları silmek istediğiniz dizine dönüşür. Daha sonra rd, geçerli dizini ve tüm alt dizinleri silmeyi istediğinde, alt dizinlerin silinmesi başarılı olur, ancak geçerli dizinin silinmesi başarısız olur - çünkü içerideyiz. Bu, 2> NUL yutan bir hata üretir. (2 hata akışıdır). Çok kurnaz Bay Stewart!
Kinetic

Oh ve "setlocal enableextensions", geçerli dizini yığına aynı anda itme ve dizini değiştirme yeteneğini açar. Bu sadece XP öncesi gerekli gibi görünüyor, çünkü orada ve daha sonra varsayılan olarak Açık olarak ayarlanmış durumda.
Kinetic

Yorumlardaki bilgileri cevaba entegre edebilir misiniz (yorumlar her an kaybolabilir)? ( Olmadan kullanarak "Edit:" "Güncelleme:" etiketler .)
Peter Mortensen

12

Ben sadece morty346 ne gönderdi bir araya koymak:

set folder="C:\test"
IF EXIST "%folder%" (
    cd /d %folder%
    for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
)

Değişkende tanımlanan klasörün önce var olup olmadığını hızlı bir şekilde kontrol eder, dizini klasöre değiştirir ve içeriği siler.


2
Bu nedenle, hızlı ipucu - bunu "IF EXIST" deyimiyle bile bir ağ yolunda çalıştırmayı denerseniz, klasör ayarlanamaz ve cmd isteminde "UNC yolları desteklenmiyor, varsayılan olarak bir deyim kaydedilir windows dizininde "yazdığınızda windows dizininizdeki her şeyi silmeye çalışır. Yani dikkatli ol.
CBRF23

11

Bunu delve /Sişaretini kullanarak yapabilirsiniz (tüm alt dizinlerdeki tüm dosyaları geri almasını söylemek için):

del /S C:\Path\to\directory\*

RD komutu da kullanılabilir. Bir komut istemi olmadan sessizce tekrar tekrar silin:

@RD /S /Q %VAR_PATH%

Rmdir (rd)


5
set "DIR_TO_DELETE=your_path_to_the_folder"

IF EXIST %DIR_TO_DELETE% (
    FOR /D %%p IN ("%DIR_TO_DELETE%\*.*") DO rmdir "%%p" /S /Q
    del %DIR_TO_DELETE%\*.* /F /Q
)

3

Takip etmeyi dene; benim için çalışıyor.

"C: \ tmp" klasörüme veri dökümü bir uygulama var ve aşağıdaki benim için en iyi çalışır. Verileri silmeniz için Evet veya Hayır bile istemez . Her 5 dakikada bir çalışması için bir program yaptım

cd "C:\tmp"

del *.* /Q

7
"C: \ tmp" klasörü yoksa (siz veya başka bir uygulama bu klasörü silmişse) ve bu klasörü çalıştırmayı denerseniz, "C: \" içindeki diğer klasördeki verileri silmez mi? (Benimle oldu)
Vikram

4
Vikram'ın belirttiği gibi: 1) Bu çok tehlikelidir ve 2) soruda belirtildiği gibi alt dizinleri kaldırmaz.
Bill_Stewart

2
Klasörlere ek olarak ... sadece del /q c:\tmp\*.*bir milyon kat daha güvenli yapabilirsiniz. Bahsetmemek cdsadece yolu değiştirecek, sürmeyecek.
Nyerguds

1
Bu korkunç bir tavsiye. Diğerlerinin de belirttiği gibi, bunun sonucunda çok önemli verileri temizleyebilirsiniz. Kaldırılmak için işaretlenmiş sanırım o kadar kötü.
RyanfaeScotland

2

Daha da iyisi, C:\windows\tempklasörün altındaki her şeyi kaldırmak istediğimi varsayalım.

@echo off
rd C:\windows\temp /s /q

11
Bu dizini kaldırır c:\windows\temp. Asıl sorunun sorduğu şey bu değildi.
Bill_Stewart

Dizini kaldırmak benim için en kolay görünüyor ve daha sonra yeniden oluşturmanız gerekirse, yapabilirim. Bir sorun, özel klasör izinlerinin kaybedilmesi olabilir. Ancak, bu diğer cevapların çoğundan çok daha kolay görünüyor .
madannes

1
Ne yazık ki, toplu komut dosyasından silme ve derhal yeniden oluşturma, Win10'da rastgele "erişim engellendi" hataları veriyor gibi görünüyor ...
Nyerguds

2

Kullanabilirsin Boş bir klasörü temizlediğiniz klasöre yansıtmak için robocopy .

robocopy "C:\temp\empty" "C:\temp\target" /E /MIR

Gerçek klasörü kaldıramaz veya yeniden oluşturamazsanız da çalışır.

Mevcut bir boş dizin gerektirir.


1
Robocopy'nin yardımına göre, bu /MIR :: MIRror a directory tree (equivalent to /E plus /PURGE).yüzden /Ebunun gereksiz olduğundan eminim .
Nyerguds

2

kullanım

set dir="Your Folder Path Here"
rmdir /s %dir%
mkdir %dir%

Bu sürüm sormadan siler:

set dir="Your Folder Here"
rmdir /s /q %dir%
mkdir %dir%

Misal:

set dir="C:\foo1\foo\foo\foo3"
rmdir /s /q %dir%
mkdir %dir%

Bu netleşecek C:\foo1\foo\foo\foo3.

( Abdullah Saboin'in cevabından bahsetmek istiyorum . Onu kopyalamamla ilgili bir karışım vardı. Görevini fark etmedim. Hatalara işaret ettiği için melpomene'e teşekkür etmek istiyorum !)


Hiç işe yaramıyor. boş bir dizin rmdir foodeğilse hatalar foo.
Melpomene

@melpomene Hatayı buldum ve düzeltilmelidir!
TravieDude Minecraft ve Daha Fazlası

1
@Abdullah Sabouni'yi hiçbir şekilde kopyalamak istememiştim. Bunu fark etmemeliydim. Üzgünüm.
TravieDude Minecraft ve Daha Fazlası

@melpomene Hatamı ve olanlara bakış açımı söyledim. Ama yine de yardımcı olması durumunda silmemeye karar verdim. Bunu işaret ettiğiniz için teşekkürler.
TravieDude Minecraft ve Daha Fazlası

@TravieDudeMinecraftandMore +1 - benim için de çalıştı.
Guy Avraham

0

Her şeyi tek başına rmdirveya deltek başına silemezsiniz :

  • rmdir /s /qjoker karakter parametrelerini kabul etmez. Böylece rmdir /s /q *hata olur.
  • del /s /f /q tüm dosyaları silecek, ancak boş alt dizinler kalacaktır.

Tercih ettiğim çözüm (diğer birçok toplu iş dosyasında kullandığım gibi):

rmdir /s /q . 2>NUL

0

GregM'nin cevabının sadece değiştirilmiş bir versiyonu :

set folder="C:\test"
cd /D %folder%
if NOT %errorlevel% == 0 (exit /b 1)
echo Entire content of %cd% will be deleted. Press Ctrl-C to abort
pause

REM First the directories /ad option of dir
for /F "delims=" %%i in ('dir /b /ad') do (echo rmdir "%%i" /s/q)

REM Now the files /a-d option of dir
for /F "delims=" %%i in ('dir /b /a-d') do (echo del "%%i" /q)

REM To deactivate simulation mode remove the word 'echo' before 'rmdir' and 'del'.

-1
@echo off
@color 0A

echo Deleting logs

rmdir /S/Q c:\log\

ping 1.1.1.1 -n 5 -w 1000 > nul

echo Adding log folder back

md c:\log\

Doğru yoldaydın. Tekrar silinen klasörü eklemek için kod eklemeniz yeterlidir.


1
Dizini kaldırır (böylece izinlerini kaybederek) ve yeniden oluşturur (muhtemelen farklı izinlerle) çünkü bu çözümü önermiyoruz.
Bill_Stewart

-3

Tüm dosyaları silmek için bu komutu çalıştırmalısınız:

del*.*

6
26 Temmuz 11: 21'de kabul edilen cevapla aynı. Lütfen yeni bir şeyiniz olmadığında yanıt eklemeyin.
Stephan

2
@Stephan'ın geçerli eleştirisine ek olarak, komutun del *.*(boşluklu) olması gerekir
Ty Hitzeman
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.