Belirli günden (mesela 1 ay) eski dosyaları sildirmek


forfiles

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

Forfiles klasor icerigi

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"

klasor icerigi sonuc

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.



4 Yorum Var

Yorum Ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

CAPTCHA