PowerShell Dosya/Klasör Numaralandırıcı
Gönderilme zamanı: 08 Eki 2025, 15:39
Merhabalar
Bir sordum.net makalesinden etkilendim.O makale de tek bir .vbs betiği vardı.
https://www.sordum.net/57885/topluca-do ... istirilir/
***********************************************************************************************************
Bu PowerShell betiği, dosya ve klasörleri akıllı bir şekilde yeniden adlandırmak için tasarlanmıştır. Kullanıcılara işlem yapılacak dizini seçmeleri ve istenilen dosya veya klasör türüne göre adlandırma yapmaları için bir arayüz sunar.
Genel Yapı
Kütüphane Ekleme:
Add-Type -AssemblyName System.Windows.Forms: Windows formlarını kullanmak için gerekli olan temel kütüphane eklenir.
Ana Menü:
Kullanıcıdan dosya veya klasör türüne göre seçim yapması istenir. Bu seçim dört seçenek içerir:
Sadece dosyaları.
Sadece klasörleri.
Hem dosya hem klasörleri.
Önizleme modu (sadece göster).
Dizin Seçimi:
Kullanıcıdan işlem yapılacak ana dizini seçmesi istenir. Eğer bir dizin seçilmezse script sonlanır.
Önizleme Modu
Eğer kullanıcı önizleme modunu seçerse, klasörlerin veya dosyaların nasıl yeniden adlandırılacağı hakkında bir ön izleme görüntülenir. Bu seçimde kullanıcıya üç alternatif sunulur:
Sadece dosyalar.
Sadece klasörler.
Hem dosyalar hem de klasörler.
Dosya ve Klasör İşlemleri
Dosya ve Klasörlerin Alınması:
Get-ChildItem komutu kullanılarak seçilen dizindeki dosya ve klasörler elde edilir.
Dosyalar ve dizinler, tam adlarına göre sıralanır.
Ana Dizin İşlemleri:
Kullanıcıdan ana dizin için yeni bir isim girilmesi istenir. Dizin yeniden adlandırılır ve alt dizinlerin adlandırılması için bir temel isim girilmesi istenir.
Alt Dizinler:
Eğer alt dizinler varsa, kullanıcıdan bir temel isim alınır ve alt dizinler belirli bir formatta yeniden adlandırılır.
Dosyaları İşleme Fonksiyonu
Bu fonksiyon, yeni dosya isimleri oluşturmak için bir döngü kullanır.
Dosya uzantılarını kontrol eder ve her uzantı için bir sayı sayacı tutar.
Kullanıcıdan yeni isim alır ve dosyaları yeniden adlandırır veya önizleme modunda sadece gösterir.
Değişikliklerin Listeleme ve Kapanış
Tüm yapılan değişiklikler kullanıcıya sunulur. Eğer değişiklik yoksa, bu da bir mesaj ile belirtilir.
Kullanıcıdan scriptin kapanıp kapanmayacağına dair onay alınır.
Bu PowerShell betiği, dosya ve klasörleri akıllıca yeniden adlandırma işlemlerini kullanıcı dostu bir arayüz ile yapmanızı sağlar. Esnekliği ve kullanıcıdan aldığı girdiler sayesinde ihtiyaca göre özelleştirme olanağı sunar. Yalnızca klasörler veya dosyalar üzerinde işlem yapma seçeneği, kullanıcıların görevlerini kolaylıkla icra etmelerini sağlar.
KOD İÇERİĞİ :
ÖRNEK ÇIKTI (HAYALİ BİR SENARYO) :
Betiği çalıştırdığınızı varsayalım; diyelim ki aşağıdaki gibi dizin yapısı var:
1) Ana Menü Seçimi
2) Dizin Seçimi
3) Ana Dizin İsimlendirme (2 ve 3 modlar için)
4) Alt Dizinler için Tek İsim + Numara
5) Dosya İşlemleri
6) Yapılan Değişiklikler
7) Kapanış Onayı
Bu çıktı örneğinde dosya isimlendirme mekanizması tamamen korunmuş, klasörler tek isim + -1, -2, -3 mantığıyla otomatik numaralandırılır.
Güle güle kullanın...(İyi ki Sordum.net varsın...!!!)
Bir sordum.net makalesinden etkilendim.O makale de tek bir .vbs betiği vardı.

***********************************************************************************************************
Bu PowerShell betiği, dosya ve klasörleri akıllı bir şekilde yeniden adlandırmak için tasarlanmıştır. Kullanıcılara işlem yapılacak dizini seçmeleri ve istenilen dosya veya klasör türüne göre adlandırma yapmaları için bir arayüz sunar.
Genel Yapı
Kütüphane Ekleme:
Add-Type -AssemblyName System.Windows.Forms: Windows formlarını kullanmak için gerekli olan temel kütüphane eklenir.
Ana Menü:
Kullanıcıdan dosya veya klasör türüne göre seçim yapması istenir. Bu seçim dört seçenek içerir:
Sadece dosyaları.
Sadece klasörleri.
Hem dosya hem klasörleri.
Önizleme modu (sadece göster).
Dizin Seçimi:
Kullanıcıdan işlem yapılacak ana dizini seçmesi istenir. Eğer bir dizin seçilmezse script sonlanır.
Önizleme Modu
Eğer kullanıcı önizleme modunu seçerse, klasörlerin veya dosyaların nasıl yeniden adlandırılacağı hakkında bir ön izleme görüntülenir. Bu seçimde kullanıcıya üç alternatif sunulur:
Sadece dosyalar.
Sadece klasörler.
Hem dosyalar hem de klasörler.
Dosya ve Klasör İşlemleri
Dosya ve Klasörlerin Alınması:
Get-ChildItem komutu kullanılarak seçilen dizindeki dosya ve klasörler elde edilir.
Dosyalar ve dizinler, tam adlarına göre sıralanır.
Ana Dizin İşlemleri:
Kullanıcıdan ana dizin için yeni bir isim girilmesi istenir. Dizin yeniden adlandırılır ve alt dizinlerin adlandırılması için bir temel isim girilmesi istenir.
Alt Dizinler:
Eğer alt dizinler varsa, kullanıcıdan bir temel isim alınır ve alt dizinler belirli bir formatta yeniden adlandırılır.
Dosyaları İşleme Fonksiyonu
Kod: Tümünü seç
function Process-Files {
param([array]$files)
foreach ($file in $files) {
...
}
}
Dosya uzantılarını kontrol eder ve her uzantı için bir sayı sayacı tutar.
Kullanıcıdan yeni isim alır ve dosyaları yeniden adlandırır veya önizleme modunda sadece gösterir.
Değişikliklerin Listeleme ve Kapanış
Tüm yapılan değişiklikler kullanıcıya sunulur. Eğer değişiklik yoksa, bu da bir mesaj ile belirtilir.
Kullanıcıdan scriptin kapanıp kapanmayacağına dair onay alınır.
Bu PowerShell betiği, dosya ve klasörleri akıllıca yeniden adlandırma işlemlerini kullanıcı dostu bir arayüz ile yapmanızı sağlar. Esnekliği ve kullanıcıdan aldığı girdiler sayesinde ihtiyaca göre özelleştirme olanağı sunar. Yalnızca klasörler veya dosyalar üzerinde işlem yapma seçeneği, kullanıcıların görevlerini kolaylıkla icra etmelerini sağlar.
KOD İÇERİĞİ :
Kod: Tümünü seç
Add-Type -AssemblyName System.Windows.Forms
Write-Host "=== PowerShell Dosya/Klasör Akıllı Numaralandırıcı ==="
Write-Host ""
# Ana Menü
Write-Host "1) Sadece dosyaları"
Write-Host "2) Sadece klasörleri"
Write-Host "3) Dosya ve klasörler"
Write-Host "4) Önizleme modu (sadece göster)"
$mode = Read-Host "Lütfen işlem tipini seçiniz (1-4)"
Write-Host ""
$previewMode = $mode -eq "4"
$renamedList = @()
# --- Ana dizin seçimi ---
$fbd = New-Object System.Windows.Forms.FolderBrowserDialog
$fbd.Description = "İşlem yapılacak ana dizini seçin"
if ($fbd.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {
$rootPath = $fbd.SelectedPath
} else {
Write-Host "Dizin seçilmedi, çıkılıyor..."
[void][System.Console]::ReadLine()
exit
}
# Önizleme alt menüsü
if ($previewMode) {
Write-Host "Önizleme modu seçimi:"
Write-Host "A) Sadece dosyalar"
Write-Host "B) Sadece dizinler"
Write-Host "C) Dosya ve dizinler"
$subMode = Read-Host "Seçiminizi yapın (A/B/C)"
switch ($subMode.ToUpper()) {
"A" { $subModeNum = 1 }
"B" { $subModeNum = 2 }
"C" { $subModeNum = 3 }
default { Write-Host "Geçersiz seçim, çıkılıyor..."; exit }
}
} else {
$subModeNum = $mode
}
# --- Dosya ve klasörleri recursive al ---
$allFiles = Get-ChildItem -Path $rootPath -File -Recurse | Sort-Object FullName
$allDirs = Get-ChildItem -Path $rootPath -Directory -Recurse | Sort-Object FullName
$extensionCounter = @{}
# --- Ana dizin işlemi (sadece klasör içeren modlar) ---
if ($subModeNum -eq 2 -or $subModeNum -eq 3) {
$rootDir = Get-Item -LiteralPath $rootPath
Write-Host ""
Write-Host "Ana dizin adı: $($rootDir.Name)"
$rootNewName = Read-Host "Ana dizin için yeni isim (benzersiz, alt tire eklemeye gerek yok)"
$parentDir = Split-Path -Path $rootDir.FullName -Parent
$newRootFullPath = Join-Path -Path $parentDir -ChildPath $rootNewName
if (-not $previewMode) {
Rename-Item -Path $rootDir.FullName -NewName $rootNewName -ErrorAction Stop
$renamedList += "$($rootDir.FullName) -> $newRootFullPath"
}
$rootPath = $newRootFullPath
# --- Alt dizinler ---
$altDirs = Get-ChildItem -Path $rootPath -Directory -Recurse | Sort-Object FullName
if ($altDirs.Count -gt 0) {
Write-Host ""
Write-Host "Tüm alt dizinler için kullanılacak tek isim girin:"
$altBaseName = Read-Host "Alt dizinler için isim"
$counter = 1
foreach ($dir in $altDirs) {
$newName = "$altBaseName" + "-$counter"
$newFullPath = Join-Path -Path $dir.Parent.FullName -ChildPath $newName
if ($previewMode) {
Write-Host "[ONİZLEME-KLASÖR] $($dir.FullName) -> $newFullPath"
} else {
try {
Rename-Item -Path $dir.FullName -NewName $newName -ErrorAction Stop
$renamedList += "$($dir.FullName) -> $newFullPath"
} catch {
Write-Host "HATA: $($dir.FullName) yeniden adlandırılamadı. $_"
}
}
$counter++
}
}
}
# --- Dosya işleme fonksiyonu ---
function Process-Files {
param([array]$files)
foreach ($file in $files) {
$ext = $file.Extension.ToLower()
if (-not $extensionCounter.ContainsKey($ext)) {
Write-Host ""
Write-Host "Mevcut dosya adı: $($file.Name)"
$userBase = Read-Host "Yeni isim (sadece base name, numara başa/sona eklenebilir)"
$extensionCounter[$ext] = @{"BaseName" = $userBase; "Counter" = 1}
} else {
$extensionCounter[$ext]["Counter"]++
$userBase = $extensionCounter[$ext]["BaseName"]
}
$number = $extensionCounter[$ext]["Counter"]
$newName = "$userBase" + "_$number" + $ext
$newFullPath = Join-Path -Path $file.DirectoryName -ChildPath $newName
if ($previewMode) {
Write-Host "[ONİZLEME-DOSYA] $($file.FullName) -> $newFullPath"
} else {
try {
Rename-Item -Path $file.FullName -NewName $newName -ErrorAction Stop
$renamedList += "$($file.FullName) -> $newFullPath"
} catch {
Write-Host "HATA: $($file.FullName) yeniden adlandırılamadı. $_"
}
}
}
}
# --- Ana işlem ---
switch ($subModeNum) {
1 { Process-Files -files $allFiles } # Sadece dosyalar
2 {} # Klasörler zaten işlendi
3 { Process-Files -files $allFiles } # Dosya ve klasörler
}
# --- Değişiklikleri Listele ---
Write-Host ""
Write-Host "=== YAPILAN DEĞİŞİKLİKLER ==="
if ($renamedList.Count -eq 0) {
Write-Host "Hiçbir değişiklik yapılmadı."
} else {
$renamedList | ForEach-Object { Write-Host $_ }
}
# --- Kapanış onayı ---
Write-Host ""
$exitConfirm = Read-Host "Betik kendini kapatabilir, onaylıyor musunuz? (E/H)"
if ($exitConfirm.ToUpper() -eq "E") {
Write-Host "Betik kapanıyor..."
exit
} else {
Write-Host "Betik açık kalacak, manuel olarak kapatabilirsiniz."
[void][System.Console]::ReadLine()
}
Betiği çalıştırdığınızı varsayalım; diyelim ki aşağıdaki gibi dizin yapısı var:
Kod: Tümünü seç
C:\Users\TRWE_2012
│
├─ DOSYALAR
│ ├─ resim.jpg
│ ├─ RESİM.jpg
│ └─ not.txt
│
└─ KLASORLER
├─ TÜRKİYE
├─ DENEME-1
└─ DENEME-21) Ana Menü Seçimi
Kod: Tümünü seç
=== PowerShell Dosya/Klasör Akıllı Numaralandırıcı ===
1) Sadece dosyaları
2) Sadece klasörleri
3) Dosya ve klasörler
4) Önizleme modu (sadece göster)
Lütfen işlem tipini seçiniz (1-4): 3Kod: Tümünü seç
İşlem yapılacak ana dizini seçin: C:\Users\TRWE_2012 (Kullanıcıya pencere ile seçtiriliyor)Kod: Tümünü seç
Ana dizin adı: TRWE_2012
Ana dizin için yeni isim (benzersiz, alt tire eklemeye gerek yok): PROJE_YENİ
Kod: Tümünü seç
Tüm alt dizinler için kullanılacak tek isim girin: ALT_DIZIN
[ONİZLEME-KLASÖR] C:\Users\TRWE_2012\TÜRKİYE -> C:\Users\TRWE_2012\ALT_DIZIN-1
[ONİZLEME-KLASÖR] C:\Users\TRWE_2012\DENEME-1 -> C:\Users\TRWE_2012\ALT_DIZIN-2
[ONİZLEME-KLASÖR] C:\Users\TRWE_2012\DENEME-2 -> C:\Users\TRWE_2012\ALT_DIZIN-3Kod: Tümünü seç
Mevcut dosya adı: resim.jpg
Yeni isim (sadece base name, numara başa/sona eklenebilir): BENIM_RESIMLERIM
[ONİZLEME-DOSYA] C:\Users\TRWE_2012\DOSYALAR\resim.jpg -> C:\Users\TRWE_2012\DOSYALAR\BENIM_RESIMLERIM_1.jpg
Mevcut dosya adı: RESİM.jpg
[ONİZLEME-DOSYA] C:\Users\TRWE_2012\DOSYALAR\RESİM.jpg -> C:\Users\TRWE_2012\DOSYALAR\BENIM_RESIMLERIM_2.jpg
Mevcut dosya adı: not.txt
Yeni isim (sadece base name, numara başa/sona eklenebilir): NOTLAR
[ONİZLEME-DOSYA] C:\Users\TRWE_2012\DOSYALAR\not.txt -> C:\Users\TRWE_2012\DOSYALAR\NOTLAR_1.txt
Kod: Tümünü seç
=== YAPILAN DEĞİŞİKLİKLER ===
C:\Users\TRWE_2012\DOSYALAR\resim.jpg -> C:\Users\TRWE_2012\DOSYALAR\BENIM_RESIMLERIM_1.jpg
C:\Users\TRWE_2012\DOSYALAR\RESİM.jpg -> C:\Users\TRWE_2012\DOSYALAR\BENIM_RESIMLERIM_2.jpg
C:\Users\TRWE_2012\DOSYALAR\not.txt -> C:\Users\TRWE_2012\DOSYALAR\NOTLAR_1.txt
C:\Users\TRWE_2012\TÜRKİYE -> C:\Users\TRWE_2012\ALT_DIZIN-1
C:\Users\TRWE_2012\DENEME-1 -> C:\Users\TRWE_2012\ALT_DIZIN-2
C:\Users\TRWE_2012\DENEME-2 -> C:\Users\TRWE_2012\ALT_DIZIN-3
Kod: Tümünü seç
Betik kendini kapatabilir, onaylıyor musunuz? (E/H): E
Betik kapanıyor...
Güle güle kullanın...(İyi ki Sordum.net varsın...!!!)