PowerShell'de Dosyanın Var Olup Olmadığı Nasıl Kontrol Edilir


PowerShell'de bir dosyayı okumaya veya dosyaya yazmaya çalışmadan önce dosyanın gerçekten var olup olmadığını kontrol etmek önemlidir. Bu, komut dosyanızın başarısız olmasına neden olabilecek hataları önleyecektir. Yeni bir dosya oluşturmadan önce veya bir dosyayı silmeye çalıştığınızda da kontrol etmeniz önemlidir.

Bu yazıda, bir dosyanın var olup olmadığını nasıl kontrol edebileceğinize ve onu komut dosyalarınızda nasıl kullanacağınıza dair farklı yöntemlere bakacağız.

Bir Dosyanın Var olup olmadığını kontrol edin

PowerShell'de bir dosyanın varlığını kontrol etmek için temel olarak iki yöntem vardır. Önerilen yol Test-Path cmdlet'ini kullanmaktır ve başka bir seçenek de Get-ChildItem cmdlet'ini kullanmaktır.

PowerShell'de bir dosyanın mevcut olup olmadığını kontrol etmenin en iyi yolu Test-Cmdlet'i kullanmaktır. Bu cmdlet, $True veya $False olabilen bir boole değeri döndürecek ve örneğin bir If-Statement içinde kullanımı kolaylaştıracaktır.

Cmdlet'i doğrudan konsolunuzda çalıştırırsanız, bunun yalnızca True veya False değerini bir dize olarak döndüreceğini göreceksiniz:

Test-Path -Path "c:\temp\random-file.txt"

Daha gerçekçi bir örnek, yeni bir dosya oluşturmadan önce bir dosyanın zaten var olup olmadığını kontrol etmektir. Yolu bir değişkende saklayacağız ve kodu yalnızca Test-Path sonucu yanlış olduğunda çalıştırmak için -Not operatörünü kullanacağız:

$path = "C:\temp\File1.txt"

if (-not(Test-Path -path $path)) {
    # File doesn't exists, create the file
    New-Item -Path $path
}

Dosya yolunda joker karakterler de kullanabilirsiniz. Bu, birkaç şey yapmanızı sağlar. Öncelikle dosya adını tam olarak bilmiyorsanız o zaman adın bir kısmını arayabilirsiniz.

Ayrıca bir klasörde belirli dosya türlerinin olup olmadığını kontrol etmenize de olanak tanır. Örneğin, bir klasörde günlük dosyası mı yoksa bak dosyası mı olduğunu bilmek istiyorsanız.

# Check for specific file type
if (Test-Path -path "c:\temp\*.bak") {
    Write-Host "Bak file(s) found in the folder"
}

# Check on part of the file name
if (Test-Path -path "c:\temp\la-*.txt") {
    Write-Host "Found one or more files that start with la-"
}

Get-ChildItem'i kullanma

PowerShell'de bir dosyanın mevcut olup olmadığını kontrol etmenin başka bir yöntemi de Get-ChildItem cmdlet'ini kullanmaktır. Bu cmdlet, belirtilen öğeleri belirli bir dizinden almak için kullanılır. Ancak bir dosyanın var olup olmadığını kontrol etmek için cmdlet'i de kullanabiliriz.

Get-ChildItem ile Test-Path cmdlet'i arasındaki fark, ikincisinin yalnızca True veya False değerini döndürmesidir. birincisi dosya bilgilerini de döndürür.

Get-ChildItem cmdlet'ini kullanırken yalnızca tam yolu ve dosya adını sağlayamazsınız. Bunun nedeni, eğer dosya mevcut değilse, betiğinizin durmasına neden olacak bir hata almanızdır:

# This won't work if the file doesn't exist
$path = "c:\temp\non-existing-file.txt"
$file = Get-ChildItem -Path $path

if ($file) {
    # Do something with the file information
}else{
    Write-Host "File doesn't exist"
}

Bunun için Get-ChildItem cmdlet'ini kullanmak için aradığımız yolu ve dosya adını ayrı ayrı sağlamamız gerekecek.

Yolda aradığımız dosyayla eşleşen dosyaları filtrelemek için Filter özelliğini kullanırız:

$path = "c:\temp\"
$fileName = "non-existing-file.txt"

# Get all the files in the path and filter on filename
$file = Get-ChildItem -Path $path -Filter $fileName

if ($file) {
    # Do something with the file information
}else{
    Write-Host "File doesn't exist"
}

Alt Klasörlerde Ara

Get-ChildItem cmdlet'inin avantajı, dosyayı alt klasörlerde de arayabilmemizdir. -recurse parametresini ekleyebiliriz, böylece tüm iç içe geçmiş klasörlerde de arama yapar:

$path = "c:\temp\"
$fileName = "file1.txt"

$file = Get-ChildItem -Path $path -Filter $fileName -Recurse -File

if ($file) {
    # Do something with the file information
    Write-Host "File created on $($file.CreationTime)"
}

Yukarıdaki örnekte de görebileceğiniz gibi -File parametresini de ekledim. Uzantı dahil dosya adını araştırdığım örneklerde, aslında buna gerek yok. Ancak yalnızca dosya adına göre arama yaptığınızda dizinler de dahil edilebilir. -File parametresi sonucu yalnızca dosyalarla sınırlayacaktır.

Kapanış

PowerShell'de bir dosyanın mevcut olup olmadığını kontrol etmek istiyorsanız Test-Path cmdlet'i kullanılacak en iyi seçenektir. Sonuca bağlı olarak Doğru veya Yanlış değerini döndürür, bu da onu komut dosyalarının içinde kullanmak için en iyi seçenek haline getirir.

Dosyanın tam konumunu bilmiyorsanız veya belirli bir ada sahip bir veya daha fazla dosya olup olmadığını kontrol etmek istiyorsanız Get-ChildItem kullanmak iyi bir seçenektir.

Umarım bu makaleyi beğenirsiniz, herhangi bir sorunuz varsa aşağıya yorum bırakmanız yeterli.

İlgili makaleler