Klasör'den belli dosyaları silme

Katılım
4 Şubat 2021
Mesajlar
12
Excel Vers. ve Dili
Excel 2007 - Türkçe
Merhaba arkadaşlar,

Bir klasörü tarayıp içerisindeki tüm dosyaları listeledikten sonra içerisinde belli bir isim geçen dosyaların silinmesini mümkün kılan bir makro mevcut mu?

Örneğin klasör içinde binlerce resim dosyası mevcut ama ben bunların içerisinden sadece isminde bir yerde "thumb" geçen resimlerin silinmesini istiyorum.

Şimdiden teşekkür ederim...
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,359
Excel Vers. ve Dili
Ofis 365 Türkçe
Merhaba,

Aşağıdaki kodları bir modüle kopyalayın.

Basla ve DosyaSil için birer butona bağlayın.
Basla dizin seçmenizi sağlar diğer programlarda o dizin ve alt dizine göre dosyaları A sütununa listeler.

B sütununda ise silinmesini istediğiniz dosyaları belirtiniz. Anlamı önemli değil yeterki B sütunu boş olmasın.

Dosyasil yordamı da B sütununu tarar ve boş olmayan A sütunundaki dosyayı siler.


Kod:
Sub Basla()

    Dim Klasor As Object
    
    Set Klasor = CreateObject("Shell.Application").BrowseForFolder _
                        (0, "LİSTELENECEK KLASÖRÜ SEÇİNİZ !", 1)
                        
    If Klasor Is Nothing Then Exit Sub
    Range("A2:A65536").ClearContents
    Range("B2:B" & Rows.Count).ClearContents
    Liste (Klasor.Items.Item.Path)
    AltListe (Klasor.Items.Item.Path)
    
    Set Klasor = Nothing

End Sub
Kod:
Sub Liste(Yol As String)
    Dim dosya As String, i As Long
 
    dosya = Dir(Yol & "\*.*")
    i = 1
    While dosya <> ""
        DoEvents
        i = i + 1
        Cells(i, 1) = Yol & "\" & dosya
        dosya = Dir
    Wend
End Sub
Kod:
Sub AltListe(Yol As String)
Dim fL As Object, f As Object, dosya As String, j As Long
Set fL = CreateObject("Scripting.FileSystemObject").GetFolder(Yol).SubFolders
 
On Error GoTo sonraki
For Each f In fL
    dosya = Dir(f.Path & "\*.*")
    
    While dosya <> ""
        DoEvents
        j = [a65000].End(3).Row + 1
        Cells(j, 1) = Yol & "\" & dosya
        dosya = Dir
    Wend
    
    AltListe (f.Path)
sonraki:
Next

Set fL = Nothing
End Sub
Kod:
Sub DosyaSil()

    Dim i   As Long
    
    For i = 2 To Cells(Rows.Count, "A").End(3).Row
        If Not Cells(i, "B") = "" Then Kill Cells(i, "A")
    Next i
    
    MsgBox "İŞLEM TAMAMDIR...."
    
End Sub
 
Katılım
4 Şubat 2021
Mesajlar
12
Excel Vers. ve Dili
Excel 2007 - Türkçe
Dosya bulma komutu çalıştı, dosyaları listeledi fakat dosya sil komutu hata veriyor.

Yanlış anlamadıysam silinmesini istediğim dosyaların karşısına (B sütununa yani) herhangi bir sayı, yazı veya işaret koymamı, sonrasında ise komutu çalıştırmamı istemişiniz?

Burada şöyle bir durum söz konusu : silmek istediğim dosya sayısı binlerce, dolayısıyla her birine teker teker işaret koymam lazım ki bu durum iş yükünü hafifletmiyor; yine aynı kalıyor.

Sizden ricam -mümkünse- ilk tarama yaparken (listenecek dosyaları seçerken yani) belirtilen harf veya kelimeyi içeren dosyaları listelemesi ve bunları tek seferde silecek bir komut olması daha uygun olur.
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,359
Excel Vers. ve Dili
Ofis 365 Türkçe
Merhaba,

B sütununda dosya isminde geçen herhangi bir sözcüğü aratıp yazdırırsınız, istediğiniz değer yoksa boş bırakırsınız

dolayısıyla tek tek işaretlemek değil formülle bunu yaparsınız. Bu amaçla yazmamamın nedeni uzun süre kodları kullanmanız için.
 
Katılım
4 Şubat 2021
Mesajlar
12
Excel Vers. ve Dili
Excel 2007 - Türkçe
Merhaba,

B sütununda dosya isminde geçen herhangi bir sözcüğü aratıp yazdırırsınız, istediğiniz değer yoksa boş bırakırsınız

dolayısıyla tek tek işaretlemek değil formülle bunu yaparsınız. Bu amaçla yazmamamın nedeni uzun süre kodları kullanmanız için.
B sütununa nasıl bir formül uygulayabilirim A sütununda çıkanları tarayıp istediğim kelimeleri B sütununa yazması için?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,190
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Aşağıdaki gibi olabilir.

Bu formül A2 hücresinde eğer aranan kelime varsa DOĞRU sonucunu döndürür.

C++:
=TOPLA.ÇARPIM(--ESAYIYSA(MBUL({"kelime1";"kelime2";"kelime3"};A2)))>0
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,190
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Dosya silen koşul satırını;

If Not Cells(i, "B") = "" Then Kill Cells(i, "A")

Aşağıdaki gibi değiştirip deneyiniz.

If Cells(i, "B") = True Then Kill Cells(i, "A")
 

Cumas

Altın Üye
Katılım
9 Eylül 2013
Mesajlar
107
Excel Vers. ve Dili
Windows 11 TR, Excel 2021 64 Bit Türkçe
Altın Üyelik Bitiş Tarihi
02-10-2028

Cumas

Altın Üye
Katılım
9 Eylül 2013
Mesajlar
107
Excel Vers. ve Dili
Windows 11 TR, Excel 2021 64 Bit Türkçe
Altın Üyelik Bitiş Tarihi
02-10-2028
Merhaba,

Aşağıdaki kodları bir modüle kopyalayın.

Basla ve DosyaSil için birer butona bağlayın.
Basla dizin seçmenizi sağlar diğer programlarda o dizin ve alt dizine göre dosyaları A sütununa listeler.

B sütununda ise silinmesini istediğiniz dosyaları belirtiniz. Anlamı önemli değil yeterki B sütunu boş olmasın.

Dosyasil yordamı da B sütununu tarar ve boş olmayan A sütunundaki dosyayı siler.


Kod:
Sub Basla()

    Dim Klasor As Object
  
    Set Klasor = CreateObject("Shell.Application").BrowseForFolder _
                        (0, "LİSTELENECEK KLASÖRÜ SEÇİNİZ !", 1)
                      
    If Klasor Is Nothing Then Exit Sub
    Range("A2:A65536").ClearContents
    Range("B2:B" & Rows.Count).ClearContents
    Liste (Klasor.Items.Item.Path)
    AltListe (Klasor.Items.Item.Path)
  
    Set Klasor = Nothing

End Sub
Kod:
Sub Liste(Yol As String)
    Dim dosya As String, i As Long

    dosya = Dir(Yol & "\*.*")
    i = 1
    While dosya <> ""
        DoEvents
        i = i + 1
        Cells(i, 1) = Yol & "\" & dosya
        dosya = Dir
    Wend
End Sub
Kod:
Sub AltListe(Yol As String)
Dim fL As Object, f As Object, dosya As String, j As Long
Set fL = CreateObject("Scripting.FileSystemObject").GetFolder(Yol).SubFolders

On Error GoTo sonraki
For Each f In fL
    dosya = Dir(f.Path & "\*.*")
  
    While dosya <> ""
        DoEvents
        j = [a65000].End(3).Row + 1
        Cells(j, 1) = Yol & "\" & dosya
        dosya = Dir
    Wend
  
    AltListe (f.Path)
sonraki:
Next

Set fL = Nothing
End Sub
Kod:
Sub DosyaSil()

    Dim i   As Long
  
    For i = 2 To Cells(Rows.Count, "A").End(3).Row
        If Not Cells(i, "B") = "" Then Kill Cells(i, "A")
    Next i
  
    MsgBox "İŞLEM TAMAMDIR...."
  
End Sub
İyi Günler,
Necdet Eline emeğine sağlık.
Böyle bir makro arıyordum. Güzel çalışıyor. Denedim.
Bu makroda silinmesini istediğimiz dosyaların karşısına B sütununa herhangi bir şey yazıyoruz. Bir harf bile olsa yeterli.
Benim aradığım şöyle.
A sütununa dizindeki dosyaların ismini getiriyoruz. B sütununada sileceğimiz dosyaların adını listeliyoruz. Makro B sütunundaki dosyaları dizinde arıyor, bulursa siliyor.
Bu daha iyi olmazmı.
Burdakida işimi gördü ama zaman aldı. Şöyleki Klasörümde 3000 den fazla dosya var ve isimleri uzun ve çok az farklı yazılmış. Bunların içinde 300 tane silmek için arayıp b sütununa işaretlemek çok zaman aldı. Halbuki elimde listesi vardı.
Benim belirttiğim özelliğide ekleyerek yeni bir makro yazmak mümkün değil mi?. İlerdede çok kullanacağım
Teşekkür eder çalışmalarınızda başarılar dilerim
Kolay gelsin
 
Üst