Batch Dosyası ile Klasör İçeriğini Otomatik Olarak Silme

Bu makalede, bir kullanıcının TEMP dizinindeki geçici dosyaların Task Scheduler ile belirleyeceğim zaman aralıklarında otomatik olarak temizlenmesini bir Batch Script üzerinden yapılandıracağım. Amaç, elle müdahale gerektirmeden TEMP içeriğini düzenli olarak boşaltmak ve Disk'te biriken gereksiz dosyaların kapladığı alanı geri kazanmaktır.

TEMP dizini, işletim sisteminin ve uygulamaların çalışma sırasında ürettiği geçici dosyaları tuttuğu yerdir. Bu dosyaların bir kısmı işlem bitince otomatik olarak temizlenir; ancak uygulama beklenmedik şekilde kapandığında ya da kendi temizlik mekanizması devreye girmediğinde dosyalar geride kalır ve zamanla ciddi bir alan tüketebilir. Yoğun uygulama çalıştıran sistemlerde bu birikim oldukça hızlıdır. Buradaki asıl kazanım Disk alanıdır; genel bir "performans artışı" beklentisi yerine, dolmaya yaklaşan bir Disk'te yer açmanın somut faydasına odaklanmak daha doğru bir yaklaşımdır.

Dikkat edilmesi gereken bir nokta var: TEMP dizinindeki dosyaların bir kısmı o an çalışan süreçler tarafından kullanımda olabilir. Kullanımdaki dosyalar kilitli olduğundan silinemez ve temizlik sırasında atlanır. Bu beklenen bir davranıştır; ilgili süreç dosyayı serbest bıraktığında, bir sonraki çalıştırmada bu dosyalar da temizlenir.

Kullanımda olan TEMP dosyaları kilitli olduğu için silinemez ve atlanır. Bu normal bir durumdur; dosya serbest kaldığında sonraki çalıştırmada temizlenir.

Bu işlemde C:\Users\User Name\AppData\Local\Temp dizinindeki geçici dosyaların, Task Scheduler (Görev Zamanlayıcı) ile bir Schedule'a (zaman planı) bağlanarak belirleyeceğim aralıklarda düzenli olarak silinmesini sağlayacağım. Temizleyeceğim TEMP dizini C:\Users\Administrator\AppData\Local\Temp aşağıdaki gibidir.

Klasör İçeriğini Komutla bat dosyasından Otomatik Silme

Bu dizinin içeriğini bir Schedule'a bağlamadan önce, içeriği silen komut satırına ihtiyacım var. Kullanacağım komut aşağıdaki gibidir:

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

Komutun ne yaptığına satır satır bakalım. İlk satırda folder değişkenine hedef dizin atanıyor; burada tırnak işaretini set "folder=..." biçiminde kullanmak, dizin yolunun değişkenin içine tırnaklarla birlikte gömülmesini önler ve sonraki kullanımları sağlamlaştırır. İkinci satırdaki cd /d "%folder%" ifadesi, gerekirse sürücüyü de değiştirerek hedef dizine geçer. Üçüncü satırdaki for /F döngüsü, dir /b çıktısıyla kök seviyedeki her öğeyi tek tek alır; her öğe için önce rmdir /s /q ile klasör silmeyi dener, öğe bir dosyaysa bu komut başarısız olur ve || operatörü sayesinde del /q devreye girerek dosyayı siler.

Bu komut, folder değişkeninde belirtilen dizinin tüm içeriğini geri dönüşü olmadan siler. Çalıştırmadan önce yolun doğru olduğunu mutlaka teyit edin; yanlış bir dizin ciddi veri kaybına yol açar.

Klasör İçeriğini Komutla bat dosyasından Otomatik SilmeBu komut satırlarını bir Text dosyasına alıp ismini RemoveFolderContent olarak belirliyor ve .txt uzantısını .bat olarak değiştirerek hazırlıyorum.
Klasör İçeriğini Komutla bat dosyasından Otomatik Silme

.BAT (Batch) Dosyasının Task Scheduler'a Atanması

Hazırladığım .bat dosyasını elle çalıştırmak yerine, Windows'un yerleşik aracı Task Scheduler ile belirli gün ve saatlerde otomatik tetikleyeceğim. Böylece temizlik, tekrarlayan bir görev olarak kullanıcı müdahalesi olmadan çalışır. Task Scheduler tarafında dikkat edilmesi gereken iki konu var: görevin hangi hesapla çalışacağı ve yeterli yetkiyle çalışıp çalışmayacağı. Silinecek dizin, görevi çalıştıran hesabın kendi TEMP'iyse, o hesap aktifken bazı dosyalar kilitli kalacağından tam temizlik garanti edilmez. Bunu aşağıdaki adımlarda netleştireceğim.

Sıra, oluşturduğum .bat dosyasının Task Scheduler'a atanmasına geldi. Bunun için Task Scheduler'ı çalıştırıyorum.

1- Task Scheduler üzerinde Task Scheduler (Local) öğesine sağ tıklayarak Create Task... seçeneğini seçiyorum.

Klasör İçeriğini Komutla bat dosyasından Otomatik Silme
2- Karşıma çıkan Create Task penceresinde aşağıdaki yapılandırmaları yapıyorum.

2.1- General sekmesinde Schedule'ım için bir isim belirliyorum. .bat dosyamla aynı isimde, TEMPFolderCleanUP adını veriyorum. Security Options alanı bu senaryoda önemlidir: Temizliğin dizin üzerinde yeterli yetkiyle çalışması için Run with highest privileges seçeneğini işaretliyorum. Görevin oturum açık olmasa da çalışması gerekiyorsa Run whether user is logged on or not seçilmelidir. Ayrıca görevi çalıştıracak hesabı bilinçli seçin: hedef dizin o hesabın kendi TEMP'iyse, hesap aktifken bazı dosyalar kilitli kalacağından kısmi temizlik yaşanabilir.

Klasör İçeriğini Komutla bat dosyasından Otomatik Silme
2.2- Actions sekmesinde, Schedule'ım için çalıştıracağım .bat uzantılı dosyanın yolunu tanımlamam gerekiyor. Bu sekmedeyken New... butonuna basıyorum.

Klasör İçeriğini Komutla bat dosyasından Otomatik Silme
2.3- New Action penceresinde Action ve Program/script alanlarını yapılandırıyorum.

2.3.1- Action altında Start a program seçeneğini seçiyorum.

Klasör İçeriğini Komutla bat dosyasından Otomatik SilmeKlasör İçeriğini Komutla bat dosyasından Otomatik Silme
2.3.2- Program/script alanında .bat uzantılı dosyanın yolunu gösteriyorum.

Klasör İçeriğini Komutla bat dosyasından Otomatik SilmeKlasör İçeriğini Komutla bat dosyasından Otomatik Silme
2.4- Triggers sekmesinde, Actions sekmesinde yolunu tanımladığım .bat dosyasının ne zaman çalışacağını belirlemem gerekiyor. Bunun için New... butonuna basıyorum.

Klasör İçeriğini Komutla bat dosyasından Otomatik Silme
2.5- New Trigger penceresinde, dosyanın tetiklenme zamanını her hafta Cumartesi ve Pazar günleri saat 00:05 olarak ayarlıyorum.

Klasör İçeriğini Komutla bat dosyasından Otomatik SilmeKlasör İçeriğini Komutla bat dosyasından Otomatik SilmeKlasör İçeriğini Komutla bat dosyasından Otomatik Silme
3- C:\Users\Administrator\AppData\Local\Temp dizinindeki geçici dosyalar aşağıdaki gibidir.

Klasör İçeriğini Komutla bat dosyasından Otomatik Silme
4- Tetiklenme zamanını her hafta Cumartesi ve Pazar günleri saat 00:05 olarak ayarlamıştım. Saat tam 00:05'te .bat dosyam çalıştı ve belirttiğim dizindeki temp dosyalarını sildi. Kullanımda olan dosyalar varsa, daha önce belirttiğim gibi bunlar kilitli olduğundan atlanmış olabilir.

Klasör İçeriğini Komutla bat dosyasından Otomatik SilmeKlasör İçeriğini Komutla bat dosyasından Otomatik SilmeKlasör İçeriğini Komutla bat dosyasından Otomatik Silme
Böylece TEMP dizini içeriğinin, Task Scheduler ile bir Schedule'a bağlanarak belirlediğim aralıklarda düzenli olarak silinmesini sağlamış oldum.

Bir .bat dosyasıyla klasör içeriğini otomatik silmek, tekrarlayan bir bakım işini elle müdahale olmadan yürütmenin pratik bir yoludur. Bu yaklaşımın değeri, işlemi tek bir dizinle sınırlamasında: folder değişkeninde belirtilen yol dışında hiçbir yere dokunmadığı için, doğru yapılandırıldığında sistem genelinde istenmeyen bir etki oluşturmaz. Bu nedenle dizin yolunu her zaman dikkatle doğrulamak gerekir.

İster geçici dosyaların düzenli temizliği, ister Disk alanının kontrol altında tutulması için olsun, bu yöntem düşük maliyetli ve güvenilir bir otomasyon sağlar.

Faydalı olması dileğiyle...

Bu makaleye 11 yorum yapıldı. Sen de düşünceni paylaş!

750 karakter yazabilirsiniz.
Captcha
* Yorumlar, onaylandıktan sonra yayınlanmaktadır.
* E-posta, yorum onay bildirimi için gereklidir. Yayınlanmaz.
15.04.2025 Özgür Uzun

Teşekkürler. Emeğinize Sağlık

CEVAPLA

Cevaplar
09.09.2022 Asa

Merhaba ben bu .bat dosyasını çalılştırdıktan sonra masaüstümdeki herşey silindi ne yapacağım ??

CEVAPLA

Cevaplar
11.09.2022 Fırat Boyan

Dizin yolu oluarak Desktop gösterdiğin için silinmiştir. Başka bir açıklaması olamaz. Ben bu makaleyi oluştururken yaptığım uygulamada böyle bie sorun oluşmadı.

20.09.2021 Murat

hocam teşekkür ederiz çok makbule geçti, lakin komutları siteden kopyalayabiliyor olsaydık çok daha iyi olurdu.

CEVAPLA

Cevaplar
20.09.2021 Fırat Boyan

Merhaba Murat. Sadece komutların koplayanabilmesi için gerekli güncellemeleri yapıyorum. Su sayfada da gerçekleştirdim.

16.06.2021 Hasan Karabulut

Merhaba, bir dosyanın belirli bir büyüklüğe ulasmadıgında mesela,günlük 1 gb tın altında kaldığı zaman bir uyarı scripti olusturmak istiyorum yardımcı olabilirmisiniz

CEVAPLA

Cevaplar
29.03.2019 bülen yıldırım

merhaba
aynı klasörün içindeki sadece tüm pdf leri yada tüm jpg leri silecek şekilde kodu nasıl değiştirebiliriz?
Teşekkürler

CEVAPLA

Cevaplar
04.04.2019 Fırat Boyan

Merhaba, bu şekilde bir filtreleme yapmadım ancak bir dener, buraya sonucunu bildiririm.

25.04.2018 Enes

Güzel konu için teşekkürler hocam. Peki yine belli bir klasör içerisinde birçok dosya ve klasör var sabit olarak ve bunlara ek olarak hergün 1 adet backup klasörü(günayyılsaat ismi ile) ekleniyor ve bu hergün devam ediyor. Ben bat dosyası ile sadece yeni oluşan backup dosyasını nasıl alabilirim acaba.

Belki karışık anlatmış olabilirim şu şekilde örneklendireyim :
Bir adet "program" isminde klasör var ve bu klasör içerisinde programın kendi çalışmasını sağlayacak dosya ve klasörler var sabit. Hergün belli saatte bir adet backup klasörü "program" klasörü içerisine gün ay yıl saat olarak isimlendirilerek ekleniyor. Ben sadece backup dosyasını bat ile istediğim konuma kopyalamak istiyorum.

Teşekkürler.

CEVAPLA

Cevaplar
25.04.2018 Fırat Boyan

Merhaba Enes, Bir dene bakalım. Benim bakma şansım olmamıştı henüz :) Haber verirsen çok iyi olur.

25.04.2018 Enes

Sanırım ihtiyacımı bu parametre karşılayacak. "/d {:AA-GG-YYY: " Teşekkürler:)