Günlük sistem yönetimi işlerinde komut satırı olmadan yaşayamazsınız. GUI her zaman yanınızda olmayabilir, remote desktop bağlantısı kesilmiş olabilir ya da bir batch script yazıyorsunuzdur. İşte tam bu anlarda CMD’yi ne kadar iyi bildiğiniz ortaya çıkıyor. Bu yazıda Windows ortamında dosya ve klasör yönetiminin temel komutlarını, copy, move, del ve xcopy araçlarını gerçek dünya senaryolarıyla ele alacağız.
Temel Kavramlar ve Hazırlık
CMD’de çalışırken birkaç temel noktayı her zaman aklınızda tutun. Yönetici hakları gerektiren işlemler için CMD’yi “Yönetici olarak çalıştır” seçeneğiyle açmanız gerekir. Özellikle sistem dosyalarına dokunacaksanız ya da C:Windows altında bir şeyler yapacaksanız bu zorunludur.
Bir de şu alışkanlığı edinin: Kritik işlemlerden önce nerede olduğunuzu bilin.
cd
echo %cd%
dir
cd komutu geçerli dizini gösterir. dir ise bulunduğunuz dizinin içeriğini listeler. Bu iki komutu çalışmaya başlamadan önce çalıştırmak, yanlış dizinde yanlış bir silme işlemi yapmanızı engeller. Yıllar içinde kaç tane deneyimli sysadmin’in bu hatayı yaptığını gördüm, inanılır gibi değil.
COPY Komutu: Dosya Kopyalamak
copy komutu en basit dosya kopyalama aracıdır. Tek bir dosyayı ya da joker karakterlerle birden fazla dosyayı kopyalayabilirsiniz.
Temel Kullanım
copy C:Kaynakrapor.xlsx D:Yedekrapor.xlsx
copy C:Logsapp.log D:Arsiv
copy C:Kaynak*.txt D:Hedef
Dosya adı belirtmeden sadece hedef klasörü yazarsanız, dosya aynı adıyla oraya kopyalanır. *.txt gibi joker kullanımında ise kaynak klasördeki tüm .txt uzantılı dosyalar hedefe taşınır.
Birleştirme Özelliği
copy komutunun çok bilinmeyen ama son derece işe yarayan bir özelliği var: Birden fazla dosyayı birleştirebilir.
copy /b log1.txt + log2.txt + log3.txt combined_log.txt
Bu komut log1.txt, log2.txt ve log3.txt dosyalarını birleştirerek combined_log.txt adında yeni bir dosya oluşturur. /b parametresi binary modda kopyalama yapar. Log dosyalarını birleştirmek ya da parçalı indirilen dosyaları bir araya getirmek için ideal.
Önemli COPY Parametreleri
- /d: Şifreli dosyaları şifresiz olarak kopyalar
- /v: Kopyalama sonrası doğrulama yapar
- /n: Kısa dosya adları kullanır (8.3 formatı)
- /y: Üzerine yazma onayını otomatik “evet” yapar
- /-y: Üzerine yazma öncesi onay ister
- /z: Ağ kopyalamalarında yeniden başlatılabilir mod aktif eder
Üretim ortamında kritik dosyaları kopyalarken /v parametresini kullanmayı alışkanlık haline getirin. Biraz daha yavaş çalışır ama en azından kopyalama doğrulama yapar.
copy /v /y C:Configweb.config D:Backupweb.config
MOVE Komutu: Dosya ve Klasör Taşıma
move komutu hem dosyaları taşır hem de klasörleri yeniden adlandırmak için kullanılır. Kaynak ve hedef aynı sürücüdeyse fiziksel kopyalama yapmaz, sadece dosya sistemi tablosunu günceller, bu yüzden çok hızlıdır.
Dosya Taşıma
move C:Temprapor.xlsx D:Belgelerrapor.xlsx
move C:Logs*.log D:ArsivLogs
Klasör Yeniden Adlandırma
move C:OldProjectName C:NewProjectName
Bu komut klasörü taşımaz, sadece adını değiştirir. ren komutuyla da aynı işi yapabilirsiniz ama move daha esnektir çünkü hem yeniden adlandırma hem de farklı konuma taşıma işlemini tek seferde yapar.
Gerçek Dünya Senaryosu: Log Rotasyonu
Diyelim ki bir uygulama sunucunuzda günlük log dosyaları birikiyor ve bunları tarih bazlı klasörlere taşımanız gerekiyor. Basit bir batch script ile bunu otomatize edebilirsiniz:
@echo off
set TARIH=%date:~10,4%%date:~7,2%%date:~4,2%
mkdir D:LogArsiv%TARIH%
move C:AppLogs*.log D:LogArsiv%TARIH%
echo %TARIH% tarihli loglar arsivlendi.
Bu script çalıştığında, o günün tarihiyle bir klasör oluşturur ve tüm .log dosyalarını oraya taşır. Task Scheduler’a günlük çalışacak şekilde ekleyebilirsiniz.
MOVE Parametreleri
- /y: Üzerine yazma onayını otomatik “evet” yapar
- /-y: Üzerine yazma öncesi onay ister
move komutunun parametreleri copy kadar zengin değil ama production ortamında script yazarken /y parametresini kullanmayı unutmayın, aksi halde interaktif onay beklediği için script takılı kalır.
DEL Komutu: Dosya Silme
del komutunu kullanırken en dikkatli olunması gereken komut bu. Silinen dosyalar Geri Dönüşüm Kutusu’na gitmiyor, direkt gidiyor. Bu yüzden özellikle joker karakter kullanırken iki kez düşünün.
Temel Kullanım
del C:Tempgecici.txt
del C:Temp*.tmp
del /q C:Logs*.log
/q parametresi “sessiz mod” demek, silme onayı sormaz. Scriptlerde mutlaka kullanmanız gerekir ama interaktif kullanımda dikkatli olun.
DEL Parametreleri
- /p: Her dosya silinmeden önce onay ister
- /f: Salt okunur dosyaları da siler
- /s: Alt klasörlerdeki dosyaları da siler
- /q: Sessiz mod, onay sormaz
- /a: Dosya özniteliklerine göre seçim yapar
Özniteliğe Göre Silme
Bu özelliği çok az kişi biliyor ama son derece kullanışlı:
del /a:h C:Temp*
del /a:r /f C:OldConfig*.bak
İlk komut gizli (h = hidden) dosyaları siler. İkincisi salt okunur (r = readonly) .bak dosyalarını zorla siler. Sistem temizliği scriptlerinde bu çok işe yarar.
Kritik Uyarı: RD ile Birlikte Kullanım
del komutu klasör silemez. Klasör silmek için rd (remove directory) komutunu kullanmanız gerekir:
del /s /q C:Temp*
rd /s /q C:Temp
Önce içindeki tüm dosyaları sil, sonra klasörü kaldır. Bu sırayı takip etmek zorunda değilsiniz aslında, rd /s /q tek başına hem dosyaları hem klasörü siler, ama bazı kilitli dosyalarla uğraşırken önce del /f /s /q kullanmak işe yarar.
Gerçek Dünya Senaryosu: Eski Geçici Dosyaları Temizleme
@echo off
echo Gecici dosyalar temizleniyor...
del /f /s /q C:WindowsTemp*
del /f /s /q %TEMP%*
del /f /s /q C:UsersAdministratorAppDataLocalTemp*
echo Temizlik tamamlandi.
Bu basit script disk alanı kurtarmak için kullanılabilir. Ancak şunu belirteyim: C:WindowsTemp altında bazı dosyalar kilitli olabilir, bu durumda del o dosyayı atlayarak devam eder, script hata vermez ama o dosyalar silinmemiş olur.
XCOPY: Gelişmiş Kopyalama
xcopy komutunu “copy komutunun büyük ağabeyi” olarak düşünebilirsiniz. Klasör yapısını koruyarak kopyalama, tarih bazlı filtreleme, arşiv biti kontrolü gibi özellikleri vardır. Özellikle yedekleme scriptlerinde xcopy çok tercih edilir.
Temel Kullanım
xcopy C:Kaynak D:Hedef /e /i /h
Bu komut C:Kaynak klasörünü tüm alt klasörleriyle birlikte D:Hedef altına kopyalar.
XCOPY Parametreleri
- /e: Boş klasörler dahil tüm alt dizinleri kopyalar
- /s: Sadece içi dolu alt dizinleri kopyalar
- /i: Hedef klasör yoksa otomatik oluşturur
- /h: Gizli ve sistem dosyalarını da kopyalar
- /r: Salt okunur dosyaların üzerine yazar
- /y: Üzerine yazma onayını otomatik “evet” yapar
- /d: Sadece değiştirilmiş veya yeni dosyaları kopyalar (tarih bazlı)
- /d:mm-dd-yyyy: Belirtilen tarihten sonra değişen dosyaları kopyalar
- /a: Sadece arşiv biti işaretli dosyaları kopyalar
- /m: Arşiv biti işaretli dosyaları kopyalar ve arşiv bitini temizler
- /exclude: Belirtilen listedeki dosyaları dışarıda bırakır
- /z: Ağ üzerinde yeniden başlatılabilir mod
- /c: Hata durumunda durmadan devam eder
Günlük Yedekleme ile Arşiv Biti Kullanımı
Arşiv biti Windows’un dosya sisteminde değişikliği takip ettiği bir özelliktir. Bir dosya değiştiğinde arşiv biti otomatik olarak “set” edilir.
xcopy C:UygulamaData D:YedekData /m /e /i /y /c
/m parametresi arşiv bitini temizler. Yani ilk çalıştırmada tüm dosyalar kopyalanır ve arşiv bitleri temizlenir. İkinci çalıştırmada sadece değişen dosyalar (arşiv biti tekrar set edilmiş olanlar) kopyalanır. Bu ilkel ama etkili bir incremental backup yöntemidir.
Dışlama Listesi Kullanımı
Bazı dosya veya klasörleri kopyalama işleminden hariç tutmak için önce bir metin dosyası oluşturun:
echo .log > C:excluded.txt
echo .tmp >> C:excluded.txt
echo Thumbs.db >> C:excluded.txt
echo desktop.ini >> C:excluded.txt
Sonra bu listeyi xcopy ile kullanın:
xcopy C:Kaynak D:Hedef /e /i /y /exclude:C:excluded.txt
Bu yöntem özellikle yazılım projelerini ya da web sitesi dosyalarını kopyalarken gereksiz geçici dosyaları dışarıda bırakmak için idealdir.
Gerçek Dünya Senaryosu: Haftalık Site Yedeklemesi
Bir IIS web sunucusunda haftalık tam yedekleme için kullanabileceğiniz bir script:
@echo off
set TARIH=%date:~10,4%%date:~7,2%%date:~4,2%
set HEDEF=D:SiteBackup%TARIH%
mkdir %HEDEF%
echo log dosyalari haric tum site kopyalaniyor...
echo .log > %TEMP%xcopy_exclude.txt
echo .tmp >> %TEMP%xcopy_exclude.txt
xcopy C:inetpubwwwroot %HEDEF%wwwroot /e /i /h /r /y /c /exclude:%TEMP%xcopy_exclude.txt
echo Yedekleme tamamlandi: %HEDEF%
del %TEMP%xcopy_exclude.txt
Bu script D:SiteBackup20241215 gibi tarih bazlı bir klasör oluşturur ve web sitesini oraya yedekler.
ROBOCOPY: Modern Alternatif
xcopy hâlâ kullanılabilir ama Microsoft artık robocopy (Robust File Copy) kullanılmasını öneriyor. Windows Server 2008’den itibaren built-in geliyor. Kısa bir karşılaştırma yapalım.
robocopy C:Kaynak D:Hedef /e /copyall /r:3 /w:5 /log:D:robocopy.log
- /e: Boş dizinler dahil tüm alt dizinleri kopyala
- /copyall: Tüm dosya bilgilerini kopyala (izinler, zaman damgaları dahil)
- /r:3: Başarısız kopyalama için 3 kez dene
- /w:5: Denemeler arasında 5 saniye bekle
- /log: Log dosyasına yaz
robocopy özellikle ağ üzerinde kopyalama yaparken çok daha kararlı çalışır. Bağlantı kesilse bile kaldığı yerden devam eder. Ama bu yazının konusu xcopy olduğu için ayrıntıya girmeyeceğim, ileride ayrı bir yazı yazacağım.
Pratik Kombinasyonlar ve İleri Teknikler
FOR Döngüsü ile Toplu İşlem
Birden fazla klasörü tek seferde yedeklemek için:
@echo off
for %%F in (Config Data Scripts Templates) do (
xcopy C:Uygulama%%F D:Yedek%%F /e /i /y /c
echo %%F klasoru kopyalandi.
)
IF ile Kontrollü Silme
Belirli boyutun üzerindeki eski logları temizlemek için önce kontrol sonra silme mantığı:
@echo off
set LOG_DIR=C:AppLogs
if exist %LOG_DIR%*.log (
echo Log dosyalari bulundu, arsivleniyor...
xcopy %LOG_DIR%*.log D:ArsivLogs /y
del /q %LOG_DIR%*.log
echo Tamamlandi.
) else (
echo Silinecek log bulunamadi.
)
Dosya Varlığı Kontrolü
Script yazmak ciddi bir şeydir ve her adımda kontrol yapmak gerekir:
@echo off
set KAYNAK=C:Configdatabase.config
set HEDEF=D:Backupdatabase.config
if not exist %KAYNAK% (
echo HATA: Kaynak dosya bulunamadi: %KAYNAK%
exit /b 1
)
copy /v %KAYNAK% %HEDEF%
if %errorlevel% neq 0 (
echo HATA: Kopyalama basarisiz oldu!
exit /b 1
)
echo Basariyla kopyalandi.
exit /b 0
%errorlevel% değişkeni son komutun çıkış kodunu tutar. 0 başarı, sıfırdan farklı her değer bir hata anlamına gelir. Production scriptlerinde bu kontrolü yapmak şart.
Sık Yapılan Hatalar ve Çözümleri
Yol adında boşluk varsa tırnak işareti kullan: Bunu bilmeyen yeni başlayanlar çok sık hatayla karşılaşır.
copy "C:Program FilesAppconfig.ini" "D:Backupconfig.ini"
Tırnak işareti olmadan CMD, boşluktan sonrasını ayrı bir parametre olarak algılar ve hata verir.
UNC yollarıyla çalışmak: Ağ paylaşımlarında kopyalama yaparken:
xcopy \FileServerShareData C:LocalData /e /i /y /z
/z parametresi ağ kesintilerinde kopyalamayı kaldığı yerden devam ettirir. Büyük dosyalar veya yavaş ağlar için kritik.
Joker karakter dikkatli kullanılmalı: del . komutu uzantısı olmayan tüm dosyaları siler. Yanlış anlaşılabilecek bir komuttur. Öncesinde dir . ile neyin silineceğini görün.
Sonuç
Windows CMD’deki copy, move, del ve xcopy komutları sysadmin’in günlük araç kutusunun vazgeçilmez parçalarıdır. GUI yokken, remote bağlantı bozukken ya da otomasyona ihtiyaç duyduğunuzda bu komutlara başvurursunuz. Önemli olan her komutun parametrelerini ezberlemek değil, mantığını kavramak ve hangi senaryoda hangisini kullanacağınızı bilmek.
Pratik önerilerim şunlar: Kritik işlemlerden önce daima dir ile nerede olduğunuzu kontrol edin. Script yazarken %errorlevel% kontrolünü ihmal etmeyin. Büyük çaplı silme işlemlerinden önce joker karakteri dir ile test edin. Ağ kopyalamalarında xcopy /z veya doğrudan robocopy kullanın. Ve en önemlisi: Production ortamında test etmeden script çalıştırmayın.
Bu komutlara hakim olduktan sonra Task Scheduler ile birleştirin, otomatik yedekleme ve temizlik scriptleri oluşturun. İşlerinizin büyük bir kısmını otomatize etmek hem hata payını azaltır hem de sizi daha değerli işlere odaklanmak için serbest bırakır.