PowerShell: Dosya Adını Yoldan Al


PowerShell, Microsoft tarafından geliştirilen güçlü bir betik dili ve otomasyon çerçevesidir. Kullanıcıların bilgisayar sistemleriyle etkileşime girmesine, dosya ve klasörleri yönetmesine ve çeşitli görevleri otomatikleştirmesine olanak tanıyan bir komut satırı arayüzü sağlar. Dosya yollarıyla çalışırken, genellikle dosya adının verilen yoldan çıkarılması gerekir. Bu görev, PowerShell'de bulunan çeşitli yöntemler ve cmdlet'ler kullanılarak gerçekleştirilebilir. Bu kapsamlı kılavuzda, esneklik ve verimlilik sağlarken PowerShell'deki yollardan dosya adlarını ayıklamak için farklı teknikleri keşfedeceğiz.

Dosya Yollarını Anlamak

PowerShell'deki yollardan dosya adlarını çıkarmanın ayrıntılarına dalmadan önce, dosya yolunu oluşturan bileşenleri net bir şekilde anlamak çok önemlidir. PowerShell'de dosya yolu, bir dosyanın veya klasörün dosya sistemindeki konumunu belirten bir dizedir. Bir sürücü harfinden (veya UNC yolundan), ardından ters eğik çizgiyle ayrılmış bir dizi dizin adından ve son olarak dosya adından oluşur.

Örneğin, şu dosya yolunu düşünün: C:\klasör\alt klasör\dosyaadı.txt

  • C:\ belirtilen yolun sürücüsünü temsil eder.
  • Klasör\alt klasör, klasörü ve alt klasörlerini temsil eder.
  • dosyaadı.txt dosyanın adıdır.
  • .txt dosya uzantısıdır.

Artık dosya yolları hakkında temel bir anlayışa sahip olduğumuza göre, PowerShell'deki yollardan dosya adlarını ayıklamak için farklı yöntemleri inceleyelim.

Bölünmüş Yol Cmdlet'ini Kullanma

Dosya adlarını yollardan ayıklamak PowerShell komut dosyası oluşturmada yaygın bir görevdir. Dosyaları isimlerine göre manipüle etmemize, dosyaları yeniden adlandırma, taşıma, silme gibi işlemler yapmamıza, dosya isimlerine göre rapor oluşturmamıza veya analiz yapmamıza olanak tanır. PowerShell'deki yollardan dosya adlarını ayıklamak için en basit ve en yaygın kullanılan cmdlet'lerden biri Split-Path'tir. Split-Path cmdlet'i, belirli bir yolun dosya adı veya üst klasör gibi belirli bölümlerini almamıza olanak tanır. İşte temel sözdizimi ve parametreler:


Split-Path -Path <Path> [-Qualifier] [-NoQualifier] [-Parent] [-Leaf] [-Resolve] [-PassThru] [<CommonParameters>]

Bölünmüş yol cmdlet'inin yararlı parametrelerinin listesi buradadır.

Path

Bölmek istediğin yol

Parent

Bu parametre bir yolun yalnızca üst kısmını döndürmek için kullanılır. Örneğin, yolu C:\foo\bar.txt olarak sağlarsanız, Split-Path -Path C:\foo\bar.txt -Parent, C:\foo değerini döndürür

Leaf

Bu parametre yalnızca yoldaki son öğeyi veya dosya adını döndürmek için kullanılır

Qualifier

Sürücü veya UNC sunucusu kısmı olmadan yolun yalnızca Yol kısmını döndürür.

NoQualifier

Sürücü veya UNC sunucusu kısmı olmadan yalnızca Yol kısmını döndürür.

LeafBase

Uzantı olmadan yolun yalnızca son öğesini döndürür. LeafBase parametresinin yalnızca PowerShell 6,0 ve üzeri sürümlerde mevcut olduğunu lütfen unutmayın.

Extension

Yalnızca yaprağın PowerShell 6,0 ve üzeri sürümlerde bulunan uzantısını döndürür.

Dosya adını bir yoldan çıkarmak için -Leaf parametresini Split-Path cmdlet'iyle birlikte kullanabiliriz. Dosya adını yoldan almak için bir örnek:


$path = "C:\folder\subfolder\filename.txt"

#GetFileName from path
$fileName = Split-Path -Path $path -Leaf

Write-Output $fileName

Bu örnekte, Bölünmüş Yol komutu $Path'te saklanan dosya yolunu alır ve yolun yalnızca son öğesini (yaprak öğesi) döndürür; bu öğe "dosyaadı.txt" dosya adıdır. -Leaf parametresi cmdlet'e yalnızca yaprağı veya son öğeyi döndürme talimatını verir. Sonuç $fileName değişkeninde saklanır. Daha sonra Write-Output cmdlet'i dosya adını görüntülemek için kullanılır. $fileName değişkeni artık tek bir konumdan çıkarılan dosya adını içerecektir.

Benzer şekilde, dosya adlarını birden çok yoldan şu şekilde alabilirsiniz:


#Parameter with Multiple Paths
$Paths = "C:\Temp\AppLog.txt", "C:\Users\Salaudeen\Desktop\invoice.docx"

#Get File Name from Paths
$Paths | ForEach-Object { Split-Path -Path $_ -Leaf}

Uzantı Olmadan Dosya Adlarını Çıkarma

Dosya adını özellikle dosya uzantısı olmadan çıkarmanız gerekiyorsa PowerShell, Split-Path cmdlet'iyle -LeafBase adlı başka bir parametre sağlar. Bu parametre PowerShell 6,0 veya sonraki sürümlerde mevcuttur.

Uzantı olmadan dosya adının çıkarılmasına bir örnek:


$Path = "C:\folder\subfolder\filename.txt"
$fileNameWithoutExtension = Split-Path -Path $Path -LeafBase

$fileNameWithoutExtension değişkeni artık uzantı olmadan dosya adını içerecektir; bu durumda bu dosyaadı olacaktır.

.NET Sınıf Kitaplığı Yöntemlerini Kullanma

PowerShell'deki yollardan dosya adlarını çıkarmaya yönelik başka bir yaklaşım da PowerShell'de bulunan .NET sınıf kitaplığı yöntemlerini kullanmaktır. Özellikle System.IO.Path sınıfı, dosya yollarıyla çalışmak için yararlı yöntemler sağlar.

System.IO.Path sınıfını kullanarak dosya adını uzantısı olmadan çıkarmak için GetFileNameWithoutExtension() yöntemini kullanabiliriz. İşte bir örnek:


$path = "C:\folder\subfolder\filename.txt"
$fileNameWithoutExtension = [System.IO.Path]::GetFileNameWithoutExtension($path)

$fileNameWithoutExtension değişkeni artık dosyaadı olacak uzantı olmadan dosya adını saklayacak.

Dosya Uzantısını Yalıtmak

Diyelim ki, dosyaları uzantılarına göre kategorilere ayırmak istiyorsunuz. Bölünmüş Yol ve Normal ifadeleri kullanarak dosya uzantısını şu şekilde alabilirsiniz:


$MediaFile = "C:\Media\Movies\movie.mkv"
$Extension = (Split-Path -Path $MediaFile -Leaf) -replace '^.+(\..+)$','$1'
Write-Output $Extension

Çıktı şöyle olacaktır:


.mkv

Dosya Adlarını almak için Get-ChildItem cmdlet'ini kullanma

PowerShell'de dosya ve dizinlerle çalışmak için en sık kullanılan cmdlet'lerden biri Get-ChildItem'dir. Bu cmdlet, belirtilen konumdaki dosya ve dizinlerin listesini alır. Varsayılan olarak, dosyalar ve dizinler hakkında adları, boyutları, oluşturulma tarihleri ve daha fazlası dahil olmak üzere bilgiler içeren FileInfo ve DirectoryInfo nesnelerinin bir koleksiyonunu döndürür.

Get-ChildItem kullanarak dosya bilgilerini almak için, aramak istediğiniz dizinin yolunu belirtebilirsiniz. Örneğin, “C:\Temp” dizinindeki CSV dosyalarının listesini almak için, joker karakter operatörünü kullanarak aşağıdaki komutu kullanabilirsiniz:


Get-ChildItem -Path "C:\Temp" -File -Filter *.csv| Select -ExpandProperty Name

Bu komut, belirtilen dizindeki dosyaları temsil eden dosya nesnelerinin bir listesini döndürür.

Uzantı Olmadan Birden Fazla Dosya Adını Çıkarma

Bazı durumlarda, belirli bir dizinden uzantıları olmayan birden fazla dosya adını çıkarmanız gerekebilir. PowerShell, dosyaları belirtilen yoldan almamıza olanak tanıyan Get-ChildItem cmdlet'ini sağlar. Daha sonra dosya adlarını uzantılar olmadan çıkarmak için bunu System.IO.Path sınıf yöntemiyle birleştirebiliriz.

İşte bir örnek:


#Parameter
$DirectoryPath = "C:\Temp"

#Get All Files from the Directory
$Files = Get-ChildItem -Path $DirectoryPath -File

#Get Files without Extention
$FileNamesWithoutExtension = $Files | ForEach-Object {
    [System.IO.Path]::GetFileNameWithoutExtension($_.FullName)
}
$FileNamesWithoutExtension

$fileNamesWithoutExtension değişkeni artık belirtilen dizinden uzantıları olmayan bir dizi dosya adı içerecektir. İşte PowerShell ISE'nin çıktısı:

Dosya ve Klasör Varlığını Kontrol Etme

PowerShell'deki yollardan dosya adlarını çıkarmadan önce dosya ve klasörlerin varlığından emin olmak önemlidir. PowerShell, belirtilen yolda bir dosya veya klasörün mevcut olup olmadığını kontrol etmek için Test-Path cmdlet'ini sağlar.

Bir dosyanın varlığını kontrol etmek için Test-Path kullanmanın bir örneğini burada bulabilirsiniz:


$path = "C:\folder\subfolder\filename.txt"
$fileExists = Test-Path -Path $path

if ($fileExists) {
    Write-Host "The file exists."
} else {
    Write-Host "The file does not exist."
}

Benzer şekilde, bir klasörün varlığını kontrol etmek için Test-Path'i kullanabiliriz:


$folderPath = "C:\folder\subfolder"
$folderExists = Test-Path -Path $folderPath

if ($folderExists) {
    Write-Host "The folder exists."
} else {
    Write-Host "The folder does not exist."
}

Dosya adlarını çıkarmadan önce Test-Path'i kullanarak yolun geçerli olduğundan ve dosya veya klasörlerin gerçekten var olduğundan emin olabiliriz.

PowerShell'de dosya adları ve yollarıyla çalışmaya yönelik en iyi uygulamalar

PowerShell'de dosya adları ve yollarıyla çalışırken akılda tutulması gereken birkaç en iyi uygulama vardır:

  1. Kullanıcı girişini her zaman doğrulayın: Kullanıcı tarafından sağlanan dosya adları veya yollarıyla çalışırken, güvenlik açıklarını veya beklenmedik davranışları önlemek için girişi doğruladığınızdan ve temizlediğinizden emin olun.
  2. Hata işlemeyi kullanın: Dosyaları ve yolları değiştirirken, dosya izinleri veya ağ sorunları gibi çeşitli nedenlerden dolayı hatalar meydana gelebilir. Bu hataları düzgün bir şekilde ele almak için try ve catch gibi uygun hata işleme tekniklerini kullanın.
  3. Uç durumları ele alın: Dosya adları ve yollarıyla çalışırken sorunlara neden olabilecek, özel karakterlere veya uzun dosya yollarına sahip dosyalar gibi uç durumların farkında olun. Özel karakterlerden kaçmak veya uzun yollar için alternatif yöntemler kullanmak gibi uygun teknikleri kullanın.
  4. Komut dosyalarınızı test edin: Bir üretim ortamında dosya adlarını veya yollarını değiştiren komut dosyalarını dağıtmadan önce, beklendiği gibi çalıştıklarından ve olası tüm senaryoları karşıladıklarından emin olmak için bunları kontrollü bir ortamda kapsamlı bir şekilde test edin.

Çözüm

Dosya adlarını yollardan çıkarmak PowerShell'de yaygın bir görevdir. Bu makalede, PowerShell kullanarak dosya adlarını yollardan kolaylıkla nasıl çıkaracağımızı araştırdık. Split-Path cmdlet'ini ve System.IO.Path sınıf yöntemlerini, Get-ChildItem cmdlet, uzantılı veya uzantısız dosya adlarını kolayca ayıklamak için. Ayrıca Test-Path cmdlet'i herhangi bir işlem yapmadan önce dosya ve klasörlerin varlığını doğrulamamıza olanak tanır.

Verimli dosya yönetimi ve otomasyon için bu teknikleri özel gereksinimlerinize uyarlamayı ve bunları PowerShell betiklerinize entegre etmeyi unutmayın.

Artık PowerShell'deki yollardan dosya adlarını nasıl çıkaracağınıza dair sağlam bir anlayışa sahip olduğunuza göre, dosya işlemlerini güvenle gerçekleştirebilir ve iş akışınızı kolaylaştırabilirsiniz.

İlgili makaleler