Sitemizde arasıra Bat komutları ile ilgili örnekler veriyoruz , bugün gelen bir soru ise aynen şöyle idi: Bir klasör içindeki 1 aydan eski olanlarını silen bir .bat dosyasını nasıl hazırlayabilirim , Bu sorunun
cevabı için Microsoft a ait olan ve az bilinen bir Windows komut satırı aracından faydalanacağız ismi forfiles , yeri ise C:\Windows\System32\forfiles.exe , peki nedir bu forfiles ? , ilk olarak Microsoft tarafından Vista işletim sisteminin yönetim özelliklerinde kullanıldı ve bir komut satırı aracıdır , dosya ve klasörlerde isim , uzantı , ve yaşa bağlı işlemlerde büyük kolaylık sağlar ve toplu iş dosyaları için yardımcı komutlar barındırır forfiles te kullanılabilecek komutlar hakkında bilgi almak için cmd de aşağıdaki komutu vermeniz yeterlidir.
forfiles /?
Genellikle sistem yöneticilerinin işlerini kolaylaştırmaya yönelik olsada sıradan kullanıcıların da başlıkta belirttiğim şekilde işine yarayacaktır , Sorumuza dönersek : belirli bir klasör içerisindeki 1 aydan eski dosyaları sildirmek istiyoruz , ben örnek olması açısından C:\ dizinimde Logs isminde bir Klasör açtım ve içerisine çeşitli tarihlerde oluşturulmuş dosyalar attım , aşağıdaki kod ile 1 aydan eski tüm dosyaları sildirdim
forfiles -p "C:\logs" -s -m *.* /D -30 /C "cmd /c del @path"
Üstteki kod incelendiğinde konumuz için önemli olan iki değişken göze çarpmaktadır ilki dosya yolu ikincisi kaç günden eski olanlarını sildireceğimiz her ikisini de aşağıda kırmızı ile işaretledim
forfiles -p "C:\logs" -s -m *.* /D -30 /C "cmd /c del @path"
Bunlardan ilki silmek istediğimiz yolu ikincisi ise kaç günden eski olmaları gerektiğini belirtmektedir yani komut ile ben ; C:\Logs dosyası içerisinde 30 günden eski bütün dosyaları sildiriyorum. Elbette üstteki komutu Notepad e yapıştırıp uzantısı .bat olacak şekilde kaydetip çalıştırmak daha pratik olacaktır , Parametrelerine kısaca göz atacak olursak:
/P : yoladı Aramaya başlanacak yolu gösterir.Varsayılan klasör: geçerli çalışma dizini (.)
/M : aramamaskesi , Arama maskesine göre dosyaları arar. Varsayılan arama maskesi: '*'.
/S : Özyinelemeli olarak alt dizinlere gidileceğini belirtir. "DIR /S" gibidir.
/C : komut Her bir dosya için yürütülecek komutu belirtir.Komut dizelerinin çift tırnak içine alınması gerekir.Varsayılan komut: "cmd /c echo @file".Komut dizesinde aşağıdaki değişkenler kullanılabilir:
@file - dosyanın adını döndürür.
@fname - uzantı hariç olmak üzere dosya adını döndürür
@ext - yalnızca dosyanın uzantısını döndürür.
@path - dosyanın tam yolunu döndürür.
@relpath - dosyanın göreli yolunu döndürür.
@isdir - dizinler için "TRUE",dosyalar için "FALSE" döndürür.
@fsize - dosyanın bayt cinsinden boyutunu döndürür
@fdate - dosyanın son değiştirme tarihini döndürür.
@ftime - dosyanın son değiştirme saatini döndürür.
Komut satırına özel karakterler girmek için,karakterin onaltılık kodunu 0xHH biçiminde kullanın (örn., sekme için 0x09). İç CMD.exe komutlarının önüne "cmd /c" getirilmelidir.
/D : tarih , Son değiştirme tarihi "dd.MM.yyyy" biçimi kullanılarak belirtilen tarihe eşit veya bu tarihten büyük (+) veya bu tarihe eşit veya bu tarihten küçük (-) olan dosyaları seçer ya da son değiştirme tarihi geçerli tarih artı "gg" güne eşit veya bundan büyük (+) veya geçerli tarih eksi "gg" güne eşit veya bundan küçük (-) olan dosyaları seçer. Geçerli bir "gg" gün sayısı, 0 ile 32768 arasında herhangi bir sayı olabilir. İşaret belirtilmezse, "+" varsayılır.
Aşağıda C:\Logs klasörümüzün içeriğini görüyorsunuz
1. Belirli günden eski dosyaları listeletelim (örneğimiz 1 gün):
Forfiles -p "C:\logs" /s /m *.* /d -1 /c "cmd /C Echo @File"
2. KLasör içerik dökümünü ful yolunu vererek listelesin
Forfiles -p "C:\logs" /s /m *.* /d -1 /c "cmd /C Echo 0×22@Path\@File0x22"
Gibi örnekler çoğaltılabilir.
Çalıştıysa sorun yoktur ABC , Selamlar
Merhabalar,
Şu işimi görüyor sanırım 🙂
forfiles -p "%temp%" -s -m *.* /D -1 /C "cmd /c del /F /Q @path"
Teşekkürler
Merhabalar, bilgi için teşekkürler. Bazı dosyalar için "Are you sure" şeklinde bizden yanıt bekliyor. Bunu kaldırmanın bir yolu var mıdır. "Y" ya da "N" tuşuna basmak gerekiyor. Silemedikleri dosyaları atlaması için ne yapabiliriz. Teşekkürler.
Doğrudur Xp aklıma gelmedi , hatırlatma için teşekürler.
Xp de çalışmıyor. bilginiz olsun
Belirli bir saat veya dakika işin içine girdiğinde sanırım vbs ile zahmetsizce bunu yapabilirisiniz , öyle tek satırlık komut bulmanız zor (Varsa bile bilgim dahilinde değil) , eğer silmek sitediğiniz dizin yolunu ve kaç saaten eskileri sildirmek istediğinizi yazarsanız birlşeyler karalamaya çalışırız
Merhaba,
bu işlemde gün bazlı silinme yapılıyor; saat bazlı bir silme işlemi için hangi komutu kullanabiliriz? Rica etsem yardımcı olabilir misiniz?
Teşekkürler.
Sizde uzantıların hepsi farklı yanılmıyorsam bu durumda Powershell kullanılabilir diye tahmin ediyorum ama denemek gerek
Değerli bilgileriniz için teşekkürler. Bir sorum olacaktı. c diski altında log1, log2, log3 gibi sıralı dosyalar olsaydı tek satırda silme işlemini nasıl yapardık. Yanı verdiğimiz path içersinde değişken alan nasıl kullanabiliriz. Yardımlarınızı beklemekteyim.
Teşekkürler,