PowerShell Kullanarak Tarih Bazlı Dosya Gruplama

İçinde binlerce video ve görüntü dosyasını barındıran karmaşık klasör yapılarına sahip arşivim bulunmaktaydı. Amacım, tüm arşivdeki dosyaları çekildikleri tarihe göre Yıl-Ay-Gün formatında PowerShell kullanarak klasör bazlı gruplandırmaktı.

Bu dosyaların değiştirilme tarihleri, aynı zamanda çekildiği zaman bilgisini vermekteydi. Aşağıda yazdığım PowerShell komutu ile, belirlediğim kaynak klasör içerisindeki tüm dosyaları, alt klasörleri de içerecek şekilde tarayarak, belirttiğim hedef klasör yoluna istediğim formatta taşınmalarını sağladım.

Depolama alanı konusunda bir sıkıntım olmadığı için, işlemi gerçekleştirirken Move-Item komutunu kullanmak yerine, kaynak klasör yapıma zarar vermemek adına Copy-Item komutunu tercih ederek dosyaları istediğim formatta kopyaladım. Gerekli kontrolleri yaptıktan sonra, kaynak klasörümü manuel olarak sildim.


# Hedef klasör
$hedefKlasor = "H:\Yeni Arşiv"

# Kaynak klasör
$kaynakKlasor = "H:\Eski Arşiv"

# Kaynak klasördeki tüm dosyaları ve alt klasörlerini tara
$dosyalar = Get-ChildItem -Path $kaynakKlasor -Recurse | Where-Object {!$_.PSIsContainer}

foreach ($dosya in $dosyalar) {
      # Dosyanın değiştirilme tarihini al
    $dosyaDegistirilmeTarihi = $dosya.LastWriteTime.ToString("yyyy-MM-dd")

    # Hedef klasörün yolu oluştur
    $hedefKlasorYolu = Join-Path -Path $hedefKlasor -ChildPath $dosyaDegistirilmeTarihi

    # Hedef klasörü oluştur
    if (-not (Test-Path -Path $hedefKlasorYolu)) {
        New-Item -Path $hedefKlasorYolu -ItemType Directory -Force
    }

    # Dosyayı hedef klasöre taşı
    $hedefDosyaYolu = Join-Path -Path $hedefKlasorYolu -ChildPath $dosya.Name
    
    Move-Item -Path $dosya.FullName -Destination $hedefDosyaYolu -Force

}

You may also like...