Windows’ta Batch Script Rehberi: Temel Dosya ve Klasör Komutları
Görsel kaynağı: https://madushaprasad21.medium.com/what-is-batch-language-bbdd4ee9b627
Selamlar herkese. Bu yazıda Windows kullanırken bir şekilde karşılaştığımız komut satırı ekranında scripting nasıl yapılır onu anlatmaya çalışacağım.
Batch Script Nedir?
Bilmeyenleriniz varsa, batch script Windows işletim sisteminde çalışan, belirtilen komutları otomatik olarak çalıştırmaya yaran script dosyalarıdır. Uzantı olarak genelde .bat yada .cmd şeklinde denk gelmişsinizdir.
Amacınız komutları tekrar tekrar çalıştırmaktan kaçınmaksa, bu tarz işleri Windows için batch, Linux için shell script ile daha kolay hale getirebilirsiniz. Bir bakıma otomasyon diyebiliriz.
PowerShell ile Farkı Nedir?
Tabii Windows’ta batch script tek seçenek değil. Bunun yanı sıra, PowerShell de kullanabilirsiniz. Sadece PowerShell, daha gelişmiş bir dildir ve istendiği taktirde .NET kütüphanelerini de kullanabilirsiniz. Yani buradan şunu anlayabiliriz batch script’ten bahsediyorsak görece daha basit işlemleri yapabiliriz. PowerShell ise daha gelişmiş işlemler için idealdir.
Temel Komutlar
İlk temel komutumuz, şaşırtıcı bir komut olan, hiçbir yerde karşılaşmadığınız echo komutudur. İlginçtir bu komutla “Merhaba dünya” yazdıracağız.
@echo off
echo Merhaba dunya
pause
@echo off ile komutların ekrana yazdırılmasını engelleriz. Eğer bunu yazdırmasaydık direkt echo Merhaba dunya komutunu ekrana yazdırılacaktı.
echo ile ekrana bir mesaj basarız. Eğer herhangi bir parametre kullanmazsak, mevcut echo ayarını gösteriririz. Yani on mu off mu gibi.
pause ise kullanıcıdan bir tuşa basmasını bekler.
Bu örnekle birlikte, bir batch dosyasının nasıl çağırılabileceğini de görmüş oluyoruz. Sadece dosyanın adını yazarak çağırabiliriz. Tabiiki çift tıklayarak da açabiliriz.

cls
Bu komutla ekrandaki çıktıları temizleriz.
@echo off
echo Merhaba dunya
pause
echo
cls
echo Her seyi temizledim
pause
Çıktı aşağıdaki gibidir. Görselleri paylaşarak anlatıyorum ama bunu başka türlü daha anlaşılır gösterebileceğimi sanmıyorum.

Klasör İşlemleri
Bir klasör olşturmak için diğer işletim sistemlerinde de olduğu gibi burada da mkdir komutunu kullanırız. Kısa olarak md komutunu da kullanabilirsiniz. Burada her iki komut örneğini de göstereceğim. Ve pause’ları da kaldırayım diyorum :)
@echo off
mkdir TestDizi
md TestDiziniMdIle
echo Klasorler olusturuldu

Gördüğünüz gibi her iki türlü de oluşturabildik. Dilersek tek seferde recursive olarak oluşturabiliriz. Bunun için de md ya da mkdir’i şöyle kullanmalıyız.
@echo off
md a\b\c\d
echo Klasorler olusturuldu

Dizin Değiştirme
Dizin değiştirme için diğer işletim sistemlerinde yer alan cd komutu burada da aynı şekilde kullanılıyor. Kodumuza bakalım önce
@echo off
md a
echo a dizini olusturuldu, ilgili dizine gidiliyor
cd a
echo a dizinine giris yapildi.
echo mevcut dizin %CD% olarak tanimli. Alt satirda tekrari yazdirilacak.
cd
echo ust dizine geri cikiliyor
cd ..
cd a bu komutla a dizinine gideriz.
echo içerisinde yazdığımız %CD% değeri bulunduğumuz dizin bilgisini tutan değişkendir. Bu tarz farklı hazır değişkenler mevcuttur.
Eğer cd komutuna parametre vermezseniz, %CD% değişkeni ile aynı şeyi yapar ve mevcut dizini yazdırır.
Bir üst dizin için ise yan yana iki nokta kullanırız. Diyelimki farklı bir sürücüdesiniz. Bu durumda aşağıdaki komut ile ilgili sürücüdeki dizine gidebilirsiniz. Diyelimki C sürücüsünde terminal ekranı açık. Bu durumda şu komut iş görür.
cd /D D:\Projects/MyApi
bunun bir diğer yöntemi ise pushd komutudur.
pushd D:\Tests\batchs
Sadece pushd kullandığınızda, değişmeden önceki dizin saklanır. Bu durumda, popd ile değişimden sonraki dizine geri dönersiniz. Örnek;
@echo off
pushd C:\Python312
echo mevcut dizin %CD% olarak gorunuyor.
echo eski dizine geri donuluyor
popd
echo mevcut dizin artik %CD% olarak gorunuyor.

Dizin Silme
Diyelimki bir dizini silmek istiyorsunuz. Bu, örneklerimizde oluşan a dizini olsun, bunun için rmdir ya da kısa olarak rd komutunu kullanabilirsiniz.
@echo off
echo D:\Tests\batchs\a dizini siliniyor...
rd D:\Tests\batchs\a /s /q
echo dizin silindi...
2 farklı parametre gördük.
/s parametresi, içerisindeki bütün dosyalarla birlikte silme işlemi yapar.
Eğer s parametresini vermeseydik dizinin boş olmadığına dair bir hata görecektik.

/q parametresi, silme işlemi için onay istemez.
Eğer q parametresini vermeseydik, böyle bir onay istenecekti.

Dosya İşlemleri
Dosyaya Yazdırma
Örneğin bir mesajı, bir dosyaya yazdırmak isteseydik aşağıdaki şekilde echo kullanımı (pipe), dosyaya yazmamıza yardımcı olacaktı.
@echo off
echo Lorem ipsum dolor sit falan filan. > lorem.txt
echo Dosya olusturuldu
Dosya Taşıma
Dosya taşıma için move komutunu kullanabilirsiniz.
@echo off
echo Lorem ipsum dolor sit falan filan. > lorem.txt
echo Dosya olusturuldu
echo Dosya tasiniyor
md dosyalar
move lorem.txt dosyalar\
echo Dosya tasindi

Burada move komutu /Y ve /-Y parametrelerini almaktadır.
/Y parametresi, herhangi bir onay almadan dosyaları taşır
move /Y lorem.txt dosyalar\

/-Y parametresi, kullanıcı onayını bekler.
move /-Y lorem.txt dosyalar\

Dosya Silme
Batch scripting yaparken, windows’ta dosya silmek için del komutu kullanırız. Yine bu komut yerine erase komutunu da kullanabiliriz.
@echo off
echo dosya siliniyor
del dosyalar\lorem.txt
echo Dosya silindi

Parametrelerine gelecek olursak biraz daha bol parametreye sahiptir.
- /F parametresi, read-only dosyaları zorla siler.
- /Q parametresi, kullanıcıdan onay beklemez.
- /S parametresi, alt dizinlerde yer alan dosyaları da siler.
- /P parametresi, kullanıcıdan onay istemek içindir.
- /A parametresi, bazı attribute’lara sahip dosyaları silmenize yardımcı olur.
del /A parametresiyle kullanılabilecek tüm attribute’lar şunlardır:
- R attribute’u, salt okunur (Read-only) dosyaları siler
- S attribute’u, sistem (System) dosyalarını siler
- H attribute’u, gizli (Hidden) dosyaları siler
- A attribute’u, arşiv (Archive) dosyalarını siler
- I attribute’u, içerik dizine eklenmeyen (Not Content Indexed) dosyaları siler
- L attribute’u, symlink ya da junction points gibi sembolik bağlantıları siler.
- O attribute’u, çevrimdışı (Offline) dosyaları siler
-
- ise herhangi bir özniteliğin olmadığını belirtir.
Örnek bir kullanım şöyledir;
del /A:HR dosyalar\*.txt
Yukarıdaki örnekte hem gizli hem de read-only olan bütün txt dosyalarını siler. Yani bir wildcard kullanımı da yapabilirsiniz. Fakat wildcard kullanımı attribute olmadan da kullanılabilir. Sadece örnek vermek için wildcard kullandım.
İlk yazı bu kadardı. Okuduğunuz için teşekkür ederim. Hatalarım varsa affola.