Windows'ta komut isteminde belirli bir dizindeki dosyaları / alt klasörleri silme


308

Diyelim ki, %pathtofolder%bir klasörün tam yolu olduğunu açıkça belirten bir değişken var .

Bu dizindeki her dosyayı ve alt klasörü silmek istiyorum, ancak dizinin kendisini değil.

Ancak, 'bu dosya / klasör zaten kullanılıyor' gibi bir hata olabilir ... bu durumda, devam etmeli ve o dosyayı / klasörü atlamalıdır.

Bunun için bir komut var mı?



Windows'un klasörleri silmeyi ne kadar zorlaştırdığı delilik ... Ya da nokta ile başlayan bir dosya yapmak ... Windows'ta Bash entegrasyonu için şükürler olsun! rm -rf path\to\folderWindows 10'da çalışıyor (ya da Git Bash'ten gelebilir ... eğer denemek istiyorsanız her iki şekilde de olabilir!)
Stijn de Witt

Yanıtlar:


256

C:\Temp Kaynaktaki klasörü ve dosyaları temizlemek için bu kabuk komut dosyasını kullanabilirsiniz :

del /q "C:\Temp\*"
FOR /D %%p IN ("C:\Temp\*.*") DO rmdir "%%p" /s /q

Yukarıdaki komutu içeren bir toplu iş dosyası (örneğin, delete.bat) oluşturun. Delete.bat dosyasının bulunduğu konuma gidin ve şu komutu çalıştırın: delete.bat


20
Denedim ama maalesef silinmeyen dosyalar, sadece alt klasörler silinir. Örneğin Test adında bir klasörüm var. "Ripon" ve "Wasim" adında 2 klasör ve "riponalwasim.txt" adında bir dosya içerir. Ripon ve Wasim alt klasörleri silindi, ancak riponalwasim.txt silinmedi.
Ripon Al Wasim

16
Doğrudan komut satırından çalıştırmak istiyorsanız tek yüzde işareti kullanın örn.%p
Alex

2
Bunun 2 satır alması üzücü ama en azından işe yarıyor! Çalışan bir "tek astar" aramaktan yoruldum ve bununla gideceğim, teşekkürler!
nightcoder

2
Bir satırda yarasa dosyası olmadan iki komut yürütmek için '&&' operatörünü kullanabilirsiniz ('%%' yerine tek '%' dikkat edin). del / s / q "klasörüm *" && FOR / D% p IN ("klasörüm *") DO "rmdir"% p "/ s / q
ravinsp

<için / F "delims =" %% i in ('dir / b / a-d') do (echo del "%% i" / q)> dosyalar için yardımcı olabilir (sadece bu yankıyı kaldırın)
grenix

340

rmdir iş için tüm zamanların en sevdiğim komutu. Alt klasörlerle büyük dosya ve klasörleri silmek için çalışır. Bir yedek oluşturulmaz, bu nedenle bu komutu çalıştırmadan önce dosyalarınızı güvenli bir şekilde kopyaladığınızdan emin olun.

RMDIR "FOLDERNAME" /S /Q

Bu, klasörü ve tüm dosyaları ve alt klasörleri sessizce kaldırır.


65
Bu OP'nin tutmak istediği yolu kaldırmış gibi görünüyor.
Fuzz Evans

4
Bu, klasörün kendisini kaldıracağı için başka bir komut eklemeniz gerekir: md FOLDERNAME(aşağıdaki @rakoczyn'in cevabına bakın).
thdoan

4
Burada "yedekleme oluşturuldu" ile ne demek istiyorsun? Herhangi bir tür yedekleme yaratacak hiçbir şey göremiyorum ...
Paul Groke

1
Dizin boş değil Mesaj yanıt olarak geldi!
Jamshaid Kamran

10
Klasörün kendisini kaldırmamak için, klasörü daha önce geçerli dizin haline getirin ve "" kullanın. FOLDERNAME olarak. Daha sonra yeniden oluşturmak gerekli değildir, çünkü ACL'ler kaybolabilir. cd "FOLDERNAME" RD . /S /Q
Moritz Her ikisi de

85

Aklıma gelen en basit çözüm tüm dizini kaldırmaktır

RD /S /Q folderPath

Ardından bu dizini tekrar oluşturun:

MD folderPath

5
silmek için izin verirseniz, ancak yeni klasörler oluşturmazsanız ne olur? Umarım bu mümkün :)
Sandy

13
Dizin düğümü için dosya sisteminde bir yarış başlattığından, bu kötü bir çözümdür, yani hemen sonra çalıştırılırsa ikinci komut başarısız olabilir.
Rok Strniša

22
Ayrıca, dizinin özel izinleri varsa kötü çözüm sadece ahem (whoops) nuked
Ölümsüz Mavi

'Dizin boş değil.'
Kieran Ryan

1
RD ve RMDIR aynı komuttur ve birisi bu cevabı belirttikten 9 ay sonra bu cevabı yayınladığınızdan, insanlar size neden puan veriyor?
Anahtar

51

Bu, klasörleri ve dosyaları kaldıracak ve klasörü geride bırakacaktır.

pushd "%pathtofolder%" && (rd /s /q "%pathtofolder%" 2>nul & popd)

4
Bu yaklaşımdan emin olmayan herkes için: kesinlikle dizini yeniden oluşturmaz. Olmadan 2>nul"Dosya başka bir işlem tarafından kullanıldığından işlem dosyaya erişemiyor."
Rok Strniša

6
Windows'un bir program tarafından kullanılan dosya ve klasörleri silememesinden nefret ediyorum. Ve bunu bu tek astarda lehinize kullandığınızı seviyorum.
andref

Peki bu uber-sihir Windows'da bir klasörü nasıl boşaltıyoruz ?? Etkileyici :)
mlvljr

3
@mlvljr Yalnızca üst klasörü de tutmak istiyorsanız. RD /?size bir klasörü boşaltmanın basit yolunu gösterecektir.
foxidrive

1
Başlangıç ​​konumunuza geri gelmeniz gerekiyorsa, bu güzel, aksi takdirde sadece CD mypath && RD /S .yeterli olacaktır. Yolunuzu iki kez tekrarlamanız gerektiğini sevmiyorum, uzun yollar için okumak zorlaşıyor. Bu yüzden sadece set p="mypath"başında bir tane eklerdim.
Amit Naidu

39
@ECHO OFF

SET THEDIR=path-to-folder

Echo Deleting all files from %THEDIR%
DEL "%THEDIR%\*" /F /Q /A

Echo Deleting all folders from %THEDIR%
FOR /F "eol=| delims=" %%I in ('dir "%THEDIR%\*" /AD /B 2^>nul') do rd /Q /S "%THEDIR%\%%I"
@ECHO Folder deleted.

EXIT

... verilen dizinin altındaki tüm dosya ve klasörleri siler, ancak dizinin kendisini silmez.


4
Bu doğru cevap olmalı .. sadece basit olun .. deletemyfoldercontents.bat dosyası .. yolunda pop ve bir cazibe gibi çalışır ..
timbrown

3
DEL komut satırı özlüyor seçeneği /Ade gizli özellik seti ile dosyaları silmek için ve %dir%\*benzeri çift tırnak içine alınmalıdır "%dir%\*"boşluk veya bu karakterlerden birini içeren dizinler için de işe &()[]{}^=;!'+,`~. Ve FOR komut satırı for /F "eol=| delims=" %%I in ('dir "%dir%\*" /AD /B 2^>nul') do rd /Q /S "%dir%\%%I", FOR için gizli öznitelik kümesine sahip dizinleri yoksayar. DIR seçenekleriyle /AD /Bçıkışı tüm sadece kendi adları ile dizinleri. BTW: dirortam değişkeni için iyi bir isim değil.
Mofi

1
alt klasörü silmez
RMiranda

1
@RMiranda, testlerimde OP'nin istediği gibi yapıyor. Alt klasörleri silmediği bir vakanız var mı?
thepip3r

Bu yanıt, "bu dosya / klasör zaten kullanımda" gibi bir hata olabilir ... ... bu durumda, devam etmeli ve o dosya / klasörü atlamalıdır. ?
Peter Mortensen

30
CD [Your_Folder]
RMDIR /S /Q .

Bir hata mesajı alırsınız, RMDIR komutunun geçerli klasöre erişemediğini söyler, bu nedenle onu silemez.

Güncelleme :

Gönderen bu kullanışlı comment (sayesinde Moritz Hem ), eklemek olabilir &&bu yüzden, aralarında RMDIReğer yayınlanmaz CDkomut (örneğin yanlış yazılan dizin adını) başarısız:

CD [Your_Folder] && RMDIR /S /Q .

Gönderen , Windows Komut Satırı Referans :

/ S: Bir dizin ağacını (belirtilen dizin ve tüm dosyalar dahil tüm alt dizinlerini) siler.

/ Q: Sessiz modu belirtir. Bir dizin ağacını silerken onay istenmez. (/ Q öğesinin yalnızca / s belirtilmişse çalıştığını unutmayın.)


1
Bu temp boşaltmak için mükemmel, ama bu cd [Your_Folder]çok kritik - hatırlamak zorunda bu yüzden dizinin kendisini silmiyorum ...
adaçayı

5
Bu doğru çözüm. &&Satır sonu yerine komutlar arasına ekleyin ve başarısız bir CD'den güvendesiniz.
Moritz Her ikisi de

Bu basit ve doğru bir çözümdür. Azure komut kabuğu ile bile çalışır!
Philippe

oldukça kötü bir çözüm ... Örneğin bir svn güncellemesi için bu komut satırı silinmesine ihtiyacım var - Güncellemeyi svn yapmadan önce tüm dosyaları ve klasörleri silmek istiyorum, çünkü bunu kullandığım makinede bazı değişiklikler olabilir, ancak ilgili yalnızca iade edilen öğelerdir. RMDIR / S / Q yapıyor. Ayrıca SVN bağlantısını kaldırır ve bu nedenle klasör artık svn klasörü yok yapar
Dominik Lemberger

Bunun önceki dört cevaptan farkı nedir?
Peter Mortensen

9

RD KALDIRMA Dizini anlamına gelir.

/ S: Klasörün kendisine ek olarak tüm dosyaları ve alt klasörleri siler. Tüm klasör ağacını kaldırmak için bunu kullanın.

/ S: Sessiz - YN onayını görüntüleme

Misal :

RD /S /Q C:/folder_path/here

1
olduğu için upvoted tek anlatmaya /Sve /Qortalama
SourceVisor

2
Hayır rd, rmdirdizinin kendisine eşdeğerdir ve kendisini kaldırır ve OP'nin istediği şey değildir.
WesternGun

Bu yanıt, "bu dosya / klasör zaten kullanımda" gibi bir hata olabilir ... ... bu durumda, devam etmeli ve o dosya / klasörü atlamalıdır. Örneğin, devam etmek yerine tamamen iptal ediliyor mu?
Peter Mortensen

8

Powershell kullanıyorum

Remove-Item c:\scripts\* -recurse

Klasörün kendisini değil klasörün içeriğini kaldıracaktır.


rhellem'in yanıtı son zamanlarda, ama bunu benim için yapacak tek cevap bu. (8.1 8.1, seçime göre değil)
philologon

2
Toplu komut satırından:powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"
Rosberg Linhares

"*" İşaretinin gerekli olduğunu veya klasörün kaldırılacağını unutmayın.
mhenry1384

7

, 2018-06-01 tarihinde yayınlanmıştır olarak cevaplardan hiçbiri hariç tarafından gönderildi tek komut satırının foxidrive , gerçekten tüm dosya ve tüm klasörleri / dizinleri silinmiş %PathToFolder%. Bu, bir klasörün tüm dosyalarını ve alt klasörlerini silmek için çok basit bir tek komut satırı ile bir yanıt daha göndermenin nedeni ve 2018-06-01'de DEL kullanılarak gönderilen diğer tüm yanıtların neden açıklandığını daha karmaşık bir çözüm içeren bir toplu iş dosyası ve RD ile FOR bir klasörü tamamen temizleyemedi.


Elbette bir toplu iş dosyasında kullanılabilen basit tek komut satırı çözümü:

pushd "%PathToFolder%" 2>nul && ( rd /Q /S "%PathToFolder%" 2>nul & popd )

Bu komut satırı, birbiri ardına yürütülen üç komut içerir.

İlk komut PUSHD, geçerli dizin yolunu yığına iter ve daha %PathToFolder%sonra geçerli dizini komut işlemini çalıştırmak için yapar .

Bu , komut uzantıları varsayılan olarak etkinleştirildiğinden varsayılan olarak UNC yolları için de çalışır ve bu durumda PUSHD , belirtilen ağ kaynağına işaret eden geçici bir sürücü harfi oluşturur ve ardından yeni tanımlanmış sürücü harfini kullanarak geçerli sürücüyü ve dizini değiştirir.

PUSHD , belirtilen dizin hiç yoksa STDERR'yi işlemek için aşağıdaki hata iletisini verir :

Sistem belirtilen yolu bulamıyor.

Bu hata iletisi, NUL2>nul aygıtına yeniden yönlendirilerek bastırılır .

Bir sonraki komut RD , yalnızca geçerli komut işlemi için geçerli dizini belirtilen dizine değiştirmek başarılı olduğunda, yani belirtilen dizinin var olması durumunda yürütülür.

Komut RD seçenekleri ile /Qve /Sbir dizini kaldırır sessizce tüm alt dizinleri belirtilen dizin gizli özellik ya da salt okunur özellik seti ile dosya veya klasörleri içerse bile. System özniteliği hiçbir zaman bir dosya veya klasörün silinmesini engellemez.

Silinmemiş olanlar:

  1. Çalışan herhangi bir işlem için geçerli dizin olarak kullanılan klasörler. Herhangi bir çalışan işlem için geçerli dizin olarak bir klasör kullanılırsa, böyle bir klasöre ait klasör ağacının tamamı silinemez.

  2. Çalışan uygulama / işlem tarafından açılırken dosyanın silinmesini önlemek için, dosya üzerinde izin verilen dosya erişim izinleri açık olarak çalışan herhangi bir işlem tarafından o anda açılmış olan dosyalar. Bu şekilde açılan bir dosya, klasör ağacının tamamının açılan dosyaya silinmesini de önler.

  3. Geçerli kullanıcının, dosya / klasörü silmek için gerekli (NTFS) izinlerine sahip olmadığı dosyalar / klasörler, klasör ağacının bu dosyaya / klasöre de silinmesini önler.

Bir klasörü silmemenin ilk nedeni, bu komut satırı tarafından belirtilen klasörün tüm dosyalarını ve alt klasörlerini silmek için kullanılır, ancak klasörün kendisini değil. Klasör geçici olarak geçerli dizinin kendisi için silinmesini önleyen komut işlemi çalıştırmak için yapılır. Tabii ki bu RD komutu tarafından bir hata mesajı çıktısı ile sonuçlanır :

Başka bir işlem tarafından kullanıldığından işlem dosyaya erişemiyor.

Burada dosya yanlış terimdir, çünkü gerçekte klasör başka bir işlem tarafından kullanılıyor, RD komutunu uygulayan geçerli komut işlemi . Aslında, bir klasör dosya sistemi için bu hata mesajını açıklayan dosya özniteliği dizinine sahip özel bir dosyadır . Ancak dosya sistemi yönetimine çok fazla girmek istemiyorum.

Bu hata mesajı, yukarıda yazılan üç nedenden ötürü oluşabilecek diğer tüm hata mesajları gibi, STDERR2>nul tutamacından NUL cihazına yönlendirilerek bastırılır .

Üçüncü komut olan POPD , RD komutunun çıkış değerinden bağımsız olarak yürütülür .

POPD , PUSHD tarafından yığından itilen dizin yolunu açar ve komut işlemini bu dizine çalıştırmak için geçerli dizini değiştirir, yani ilk geçerli dizini geri yükler. POPD , UNC klasör yolu durumunda PUSHD tarafından oluşturulan geçici sürücü harfini siler .

Not: İlk geçerli dizinin temizlenecek dizinin artık bulunmayan bir alt dizini olması durumunda POPD sessizce ilk geçerli dizini geri yükleyemez. Bu özel durumda %PathToFolder%geçerli dizin kalır. Bu nedenle, yukarıdaki komut satırını bir alt dizininden değil çalıştırmanız önerilir %PathToFolder%.

Daha ilginç bir gerçek: Komut satırını aynı zamanda UNC yolunu kullanarak C:\Temppaylaşım adı ile yerel dizini paylaşarak Tempve Windows 7'de \\%COMPUTERNAME%\Temp\CleanTestortam değişkenine atanmış UNC yolunu kullanarak da denedim. PathToFolderUNC yolu kullanılarak erişilen klasör C:\Temp\CleanTest\Subfolder1, RDSubfolder1 tarafından silinir ve bir sonraki POPD , geçerli dizini yeniden oluşturmada sessizce başarısız olur ve yerel bir dizinin gerçekten var olmasına neden olur . Maalesef POPDC:\Temp\CleanTest\Subfolder1Z:\CleanTest çalıştıran komut işlemi için geçerli dizin olarak kalan. Bu çok, çok özel bir durumda, geçici sürücü harfi geçerli dizin değiştirilinceye kadar aynı kalır.cd /D %SystemRoot%ilk geçerli dizini geri yükleyemezse 0'dan büyük bir değerle çıkmaz, bu da yalnızca POPD'nin çıkış kodunu kullanarak bu çok özel hata koşulunu algılamayı imkansız hale getirir . Bununla birlikte, UNC yolları genellikle yerel dosyalara ve klasörlere erişmek için kullanılmadığından kimsenin bu çok özel hata durumuna hiç girmediği varsayılabilir.

Kullanılan komutları daha iyi anlamak için, bir komut istemi penceresi açın, orada aşağıdaki komutları yürütün ve her komut için görüntülenen yardımı çok dikkatli bir şekilde okuyun.

  • pushd /?
  • popd /?
  • rd /?

Windows toplu iş dosyası kullanan birden fazla komut içeren tek satır , operatörleri açıklar &&ve &burada kullanılır.


Sonraki bize komut kullanarak toplu iş dosyası çözüm üzerinde bakalım DEL dosyaları silmek %PathToFolder%ve FOR ve RD de alt klasörleri silmek için %PathToFolder%.

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem Clean the folder for temporary files if environment variable
rem PathToFolder is not defined already outside this batch file.
if not defined PathToFolder set "PathToFolder=%TEMP%"

rem Remove all double quotes from folder path.
set "PathToFolder=%PathToFolder:"=%"

rem Consisted the folder path only of double quotes?
if not defined PathToFolder goto EndCleanFolder

rem Remove a backslash at end of folder path.
if "%PathToFolder:~-1%" == "\" set "PathToFolder=%PathToFolder:~0,-1%"

rem Consisted folder path only of a backslash (with one or more double quotes)?
if not defined PathToFolder goto EndCleanFolder

rem Delete all files in specified folder including files with hidden
rem or read-only attribute set, except the files currently opened by
rem a running process which prevents deletion of the file while being
rem opened by the application, or on which the current user has not
rem the required permissions to delete the file.
del /A /F /Q "%PathToFolder%\*" >nul 2>nul

rem Delete all subfolders in specified folder including those with hidden
rem attribute set recursive with all files and subfolders, except folders
rem being the current directory of any running process which prevents the
rem deletion of the folder and all folders above, folders containing a file
rem opened by the application which prevents deletion of the file and the
rem entire folder structure to this file, or on which the current user has
rem not the required permissions to delete a folder or file in folder tree
rem to delete.
for /F "eol=| delims=" %%I in ('dir "%PathToFolder%\*" /AD /B 2^>nul') do rd /Q /S "%PathToFolder%\%%I" 2>nul

:EndCleanFolder
endlocal

Toplu iş dosyası önce ortam değişkeninin PathToFolderçift ​​tırnaksız ve sonunda ters eğik çizgi olmadan bir klasör yolu ile gerçekten tanımlandığından emin olur . Sondaki ters eğik çizgi sorun olmaz, ancak bir klasör yolundaki çift tırnak işaretleri, PathToFoldertoplu iş dosyası yürütme sırasında değeri diğer dizelerle birleştirildiği için sorunlu olabilir .

İki satır önemlidir:

del /A /F /Q "%PathToFolder%\*" >nul 2>nul
for /F "eol=| delims=" %%I in ('dir "%PathToFolder%\*" /AD /B 2^>nul') do rd /Q /S "%PathToFolder%\%%I" 2>nul

DEL komutu belirtilen dizindeki tüm dosyaları silmek için kullanılır.

  • Bu seçenek /A, DEL'in seçeneği kullanmadan yok sayacağı gizli özellikli dosyalar da dahil olmak üzere tüm dosyaları işlemek için gereklidir /A.
  • Bu seçenek /F, salt okunur öznitelik ayarlı dosyaların silinmesini zorlamak için gereklidir.
  • Bu seçenek /Q, kullanıcıya birden fazla dosyanın gerçekten silinip silinmeyeceğini sormadan birden fazla dosyanın sessiz bir şekilde silinmesini çalıştırmak için gereklidir.
  • >nulSTDOUT'u işlemek için yazılan dosya adlarının çıktısını , şu anda bir dosya açıldığı veya kullanıcının dosyayı silme iznine sahip olmadığı için silinemeyen NUL aygıtına yeniden yönlendirmek için gereklidir .
  • 2>nulSTDERR tanıtıcısından silinemeyen her dosya için hata iletisi çıktısını NUL aygıtına yeniden yönlendirmek gerekir .

FOR ve RD komutları , belirtilen dizindeki tüm alt dizinleri kaldırmak için kullanılır. Ama for /Dyüzünden kullanılmaz İÇİN gizli özellik seti ile bu durum altdizinlere görmezden geliyor. Bu nedenle for /F, aşağıdaki komut satırını arka planda başlatılan ayrı bir komut işleminde çalıştırmak için kullanılır %ComSpec% /c:

dir "%PathToFolder%\*" /AD /B 2>nul

DIR/B , özniteliğe sahip dizin girişleri nedeniyle Dbir yolla gizli öznitelik gibi diğer özniteliklerden bağımsız olarak belirtilen dizindeki tüm alt dizinlerin adları nedeniyle çıplak biçimde çıkar . STDERR tanıtıcısından NUL aygıtına hiçbir dizin bulunamadığı için DIR2>nul tarafından hata iletisi çıktısını yeniden yönlendirmek için kullanılır .

Yeniden yönlendirme işlecinin , FOR komut satırında, Windows komut yorumlayıcısı gömülü komut satırını ayrı bir komut işleminde yürüten FOR komutunu çalıştırmadan önce, bu komut satırını işlediğinde değişmez bir karakter olarak yorumlanacak >caret karakteriyle kaçılmalıdır. arka planda.^dir

FOR , yol olmadan alt dizinlerin adları olan ve hiçbir zaman çift tırnak içine alınmayan bir komut komutunun STDOUT'u işlemek için yazılan çıktıyı işler .

FOR seçeneği ile /Fburada gerçekleşmeyen boş satırları yoksayar çünkü seçeneği ile DIR/B boş satırlar vermez.

FOR ayrıca, varsayılan satır sonu karakteri olan noktalı virgülle başlayan satırları yoksayar. Bir dizin adı noktalı virgülle başlayabilir. Bu nedenle eol=|, dikey çubuk karakterini, adında hiçbir dizin veya dosyanın bulunamayacağı satır sonu karakteri olarak tanımlamak için kullanılır.

FOR , boşluk ve yatay sekmeyi ayırıcılar olarak kullanarak satırı alt dizelere böler ve belirtilen döngü değişkenine yalnızca ilk boşluk / sekmeyle ayrılmış dizeyi atar I. Bir dizin adı bir veya daha fazla boşluk içerebileceğinden, bu bölme davranışı burada istenmiyor. Bu nedenle delims=, satır bölme davranışını devre dışı bırakmak ve döngü değişkenine I, her zaman tam dizin adı olarak atanmak için boş bir sınırlayıcı listesi tanımlamak için kullanılır .

Komut İÇİN komutu çalıştırır RD üzerinde neden olan bir yol içermeyen her dizin adı için RD alt klasör adı ile birleştirilmiş komut satırından klasör yolu bir kez daha belirtilmelidir.

Kullanılan komutları ve nasıl çalıştıklarını anlamak için bir komut istemi penceresi açın, orada aşağıdaki komutları yürütün ve her komut için görüntülenen tüm yardım sayfalarını çok dikkatli bir şekilde okuyun.

  • del /?
  • dir /?
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • rd /?
  • rem /?
  • set /?
  • setlocal /?

5

Bir metin belgesi oluşturmak ve bunu kopyalamak / yapıştırmak için Not Defteri'ni kullanın :

rmdir /s/q "%temp%"
mkdir "%temp%"

Seç Kaydet ve dosya adını:

delete_temp.bat

Kayıt türü: Tüm dosyalar ve Savedüğmesini tıklayın.

Her türlü hesapta (yönetici veya standart kullanıcı) çalışır. Sadece koş!

Bu örnekte geçici bir değişken kullanıyorum, ancak başka bir değişken kullanabilirsiniz! Not: Yalnızca Windows işletim sistemi için!


oldukça kolay ve temiz bir çözüm
Carlos Liu

4

Dosyayı silmek için:

del PATH_TO_FILE

İçindeki tüm dosyaların bulunduğu klasörü silmek için:

rmdir /s /q PATH_TO_FOLDER

Belirli bir klasördeki tüm dosyaları silmek (klasörün kendisini silmemek) biraz karmaşıktır. del /s *.*klasörleri silemez, ancak dosyaları tüm alt klasörlerden kaldırır. Bu yüzden iki komut gereklidir:

del /q PATH_TO_FOLDER\*.*
for /d %i in (PATH_TO_FOLDER\*.*) do @rmdir /s /q "%i"

Evet bu doğru. İki adım olmalı. Bu, daha fazla oyu hak ediyor, çünkü yukarıda daha oylanan bir cevaba kıyasla nedenini açıklıyor.
WesternGun

DEL komut satırı özlüyor seçeneği /Ade silmek gizli özellik seti ve opsiyonlu dosyaları /Fsalt okunur özniteliği seti ve son argüman etrafında çift tırnak ile dosyaları da silin. Yani del /A /F /Q "PATH_TO_FOLDER\*"daha iyi olurdu. Ve FOR komut satırı for /F "eol=| delims=" %%I in ('dir "PATH_TO_FOLDER\*" /AD /B 2^>nul') do rd /Q /S "PATH_TO_FOLDER\%%I", FOR için gizli öznitelik kümesine sahip dizinleri yoksayar. DIR seçenekleriyle /AD /Bçıkışı tüm dizinleri PATH_TO_FOLDERsadece kendi adları ile.
Mofi

Bu, önceki cevaplardan (bazıları) nasıl farklıdır?
Peter Mortensen

4

Tüm içeriği ve üst klasörün kendisini silmek için aşağıdaki komutu kullanarak bunu yapabilirsiniz:

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

Bu önceki iki cevaptan nasıl farklı?
Peter Mortensen

Bu yanıt, "bu dosya / klasör zaten kullanılıyor" gibi bir hata olabilir ... ... bu durumda, devam etmeli ve o dosya / klasörü atlamalıdır. ?
Peter Mortensen

1

Bu yaklaşımlardan birkaçını denedim, ancak hiçbiri düzgün çalışmadı.

Bu iki adımlı yaklaşımı sitedeki Windows Komut Satırı'nda buldum :

forfiles /P %pathtofolder% /M * /C "cmd /c if @isdir==FALSE del @file"

forfiles /P %pathtofolder%  /M * /C "cmd /c if @isdir==TRUE rmdir /S /Q @file"

Tam olarak ihtiyaç duyduğum ve OP tarafından belirtildiği gibi çalıştı.


İki komut satırı bir komut satırına birleştirilebilir: forfiles /P "%pathtofolder%" /M * /C "%SystemRoot%\System32\cmd.exe /C if @isdir==FALSE (del /A /F @file) else rd /Q /S @file" DEL seçeneği /A, gizli özniteliği ayarlanmış dosyaları da silmek için eklenir; aksi takdirde DEL , içindeki her gizli dosya için bulunamadı hatası mesajı verir %pathtofolder%. DEL seçeneği /F, salt okunur özniteliği ayarlanmış dosyaları silmek için eklenir %pathtofolder%, aksi takdirde DEL erişim reddedildi hata iletisi verir.
Mofi

Bu çözüm, cmd.exeher dosya ve içindeki her dizin için bir örnek başlatma nedeniyle burada yayınlanan tüm eksik çözümlerin en yavaş olanıdır %pathtofolder%. Avantajı, FORFILES'ın gizli özniteliği FOR olarak ayarlanmış dizinleri yok saymamasıdır .
Mofi

Re "Tam ihtiyacım olduğu ve OP tarafından belirtildiği gibi çalıştı." : "Bu dosya / klasör zaten kullanılıyor" ... gibi bir hata oluşup oluşmadığını sınadınız mı? Bu durumda, devam etmeli ve o dosya / klasörü atlamalıdır. " ?
Peter Mortensen

0
@ECHO OFF
rem next line removes all files in temp folder
DEL /A /F /Q /S "%temp%\*.*"
rem next line cleans up the folder's content
FOR /D %%p IN ("%temp%\*.*") DO RD "%%p" /S /Q

2. satır, her dosyadaki dosyaları Windows temp dizinindeki tüm klasörlerden kaldırır ve 3. satır, içeriği de dahil olmak üzere dizinleri temizler.
Robie

FOR komut satırı değiştirilmeli for /F "eol=| delims=" %%I in ('dir "%TEMP%\*" /AD /B 2^>nul') do rd /Q /S "%TEMP%\%%I"çünkü FOR gizli öznitelik kümesine sahip dizinleri yok sayar. DIR seçenekleriyle /AD /Bçıkışı tüm dizinleri %TEMP%sadece kendi adları ile.
Mofi

DEL belgeleri . / F ile doğru yolda olduğunuzu düşünüyorum: "Salt okunur ayarı yoksay ve yine de sil (FORCE)"
Peter Mortensen

-10

kullanın:

del %pathtofolder%\*.*   /s /f  /q

Bu %pathtofolder%, salt okunur dosyalar da dahil olmak üzere içindeki tüm dosyaları ve alt klasörleri siler ve onay istemez.


9
Düşman bana% pathtofolder% içinde boş alt klasörler bırakır.
DH

35
% Pathtofolder% içindeki alt klasörleri SİLMEZ. Çok kötü Ben bu yanlış cevabı aşağı oy verme üne sahip
Vitalii Korsakov

1
Vitalii Korsakov'un işaret ettiği gibi, bu, tüm dosya ve dosyaları alt dizinlerden siler, ancak OP'nin de nasıl kaldırılacağını sorduğu alt dizinleri yerinde bırakır.
Fuzz Evans

6
Bu komut boş klasörler bıraksa da, istenen yanıttan, kabul edilen yanıttan çok daha yakındır. Tabii ki bu şartlara bağlıdır. Benim durumumda, kök dizinde kalan dosyalardan daha çok boş klasörlere sahip olmayı tercih ederim.
MarcusUA

ancak diğer istemci makine bu klasöre yazma erişimine sahip paylaşım sürücüsünü açtığında ağ paylaşımında açık olan klasörleri ve alt klasörleri nasıl silebiliriz .. psfile ve net files komutu dosya oturumunu kapatır, ancak birkaç saniye sonra yeniden oluşturur otomatik olarak sunucuda bu kullanıcı için başka bir oturum ...
user1954762
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.