Windows Bat Dosyalarıyla Veri Yedekleme

Windows dünyasında dosyaları bir yerden bir yere taşımak veya yedeklemek söz konusu olduğunda, grafik arayüzden ziyade komut satırının gücünü kullanmak hem hız hem de otomatizasyon sağlar. Bir .bat dosyası oluşturup içine tek satırlık bir kod yazarak saatler sürecek işlemleri saniyeler içinde başlatabilirsiniz. Ancak karşımıza iki büyük seçenek çıkar: Xcopy ve Robocopy.

Xcopy (Extended Copy), Windows’un eski sürümlerinden beri var olan, temel dosya ve klasör kopyalama işlerini başarıyla yürüten bir komuttur.

  • Basit dizin yapılarını kopyalarken veya sistemde Robocopy’nin bulunmadığı (çok eski) senaryolarda.
  • Kullanımı kolaydır ve hızlıca sonuç verir.

    Örnek Kullanım:
xcopy "C:\Kaynak" "D:\Hedef" /E /H /C /I

Belirttiğin parametrelerin anlamları şunlar:

  • /E: Boş olsalar bile tüm alt klasörleri ve içindekileri kopyalar.
  • /H: Gizli (Hidden) ve sistem dosyalarını da kopyalamaya dahil eder (xcopy normalde bunları atlar).
  • /C: Hata oluşsa bile kopyalamaya devam eder. Örneğin erişim izni olmayan tek bir dosya yüzünden tüm işlemin durmasını engeller.
  • /I: Eğer “Hedef” klasörü yoksa ve birden fazla dosya kopyalıyorsan, hedefin bir klasör olduğunu varsayar ve otomatik olarak oluşturur (sana “Dosya mı klasör mü?” diye sormaz).

Robocopy (Robust File Copy), adından da anlaşılacağı üzere “sağlam” bir kopyalama aracıdır. Dizini aynalama (mirror), hata toleransı ve detaylı log tutma gibi gelişmiş özelliklere sahiptir.

  • Büyük veri setlerinde, ağ üzerinden kopyalamada veya düzenli yedekleme işlemlerinde kullanılır.
  • En büyük avantajı bağlantı kopsa bile kaldığı yerden devam edebilir. Kaynak ile hedefi birebir eşitleyebilir (/MIR parametresi ile).

Örnek Kullanım:

robocopy "C:\Kaynak" "D:\Hedef" /MIR /Z /R:5 /W:5

Belirttiğin parametrelerin anlamları şunlar:

  • /MIR (Mirror): Kaynak ve hedefi birebir eşitler (aynalar). Eğer kaynakta bir dosya silinmişse, hedeftekini de siler. Hedef klasörün kaynakla tıpatıp aynı olmasını sağlar.
  • /Z (Restartable mode): Kopyalama sırasında ağ kesintisi veya bağlantı kopması yaşanırsa, işlem kaldığı yerden devam edebilir. Büyük dosyalar için hayat kurtarıcıdır.
  • /R:5 (Retry): Bir dosya kopyalanamazsa (örneğin dosya o an kullanılıyorsa), işlemi 5 kez yeniden dener. (Varsayılan değer 1 milyondur, bu yüzden 5 yazmak mantıklıdır).
  • /W:5 (Wait): Başarısız denemeler arasında 5 saniye bekler.

Önemli Uyarı: /MIR parametresi hedefteki farklı dosyaları sildiği için, hedef klasörde önemli ve kaynağa ait olmayan dosyalarınız varsa dikkatli olmalısınız.

Hangisini seçmeliyiz.

ÖzellikXcopyRobocopy
HızStandartÇok hızlı (MT parametresi ile çoklu işlem)
Hata YönetimiZayıfGelişmiş (Yeniden deneme özelliği var)
Aynalama (Mirror)YokVar (Hedefte olup kaynakta olmayanı siler)
Ağ DesteğiTemelÇok güçlü

Eğer sadece birkaç dosyayı bir yerden bir yere taşımak istiyorsanız Xcopy yeterlidir. Ancak amacınız güvenilir bir yedekleme mekanizması kurmak, dosyaları senkronize etmek veya büyük veri klasörlerini yönetmekse, kesinlikle Robocopy kullanmalısınız. Modern Windows sistemlerinde Robocopy, altın standarttır.

Örnek üzerinden yapının tam olarak ne olduğunu görmüş olalım:

İlk olarak txt uzantısında komutlarımızı ekledikten sonra dosya uzantısını txt’den .bat uzantısı yapılır.

@echo off
echo --- KOPYALAMA ISLEMI BASLADI ---
date /t & time /t

:: Klasör Kopyalama
echo Dosya  kopyalaniyor...
robocopy "\\KHTSTSQL31\D$\Output" "\\KHTSTSQL32\C$\KopyalananFolder" /E /Z /R:3 /W:5
if %errorlevel% LSS 8 (echo Dosya Kopyalama basariyla bitti.) else (echo Dosya Kopyalama'de HATA!)

echo --- TUM ISLEMLER TAMAMLANDI ---
date /t & time /t
pause

Not: Birden fazla dizinde dosya kopyalanacaksa sadece klasör kopyalama bölümü kopyalanır.

Yukarıda bulunan .txt dosyasını Save As.. diyip uzantısını . bat olarak değiştiriyoruz.

bat uzantılı dosyamızın oluştuğu görülmektedir.

Dosyamızı manuel üzerine çift tıklayarak çalıştıralım. Başlangıçta dosyamızın boş olduğunu görüyoruz.

.bat uzantılı dosyamızı çalıştırdığımızda kopyalama işleminin gerçekleştiğini görebiliriz.

Manuel çalıştırdığımız için komut satırından rapor alabiliriz.

Yukarıdaki resimde kopyalama işleminin ne zaman başladığını kaynak ve hedef klasörleri göstermektedir. Ayrıca kaynak klasöründe hangi dosyaların kopyalandığını görebiliriz.

Yukarıdaki işlemi manuel yapmayıp Windows özelliği olan Task Scheduler ile yapabiliriz.

Dosyamızı oluşturduktan sonra Windows arama yerine Task Scheduler yazılır.

Aşağıdaki bölümde elimizde bulunan Scheduler’ı görebiliriz.

Sağ tarafta bulunan Actions bölümünde Create Task.. deyip bir Task oluşturuyoruz.

Gelen ekranda General sekmesinde Name kısmında Scheduler’a bir isim veriyoruz. Alt kısımda bulunan security options kısmında Kullanıcı oturum açmışsa da açmamışsa da çalıştır seçeneğini işaretliyoruz.

İlk seçenek yalnızca kullanıcı oturum açtığında çalışır. 3. seçenek ise en yüksek ayrıcalıklarla çalıştırır.

Bu bölümde gerekli ayarlamaları yaptıktan sonra Triggers sekmesine geliyoruz. Gelen ekranda New deyip bir tetikleme zamanı belirtiyoruz.

Başlangıçtaki settings bölümünde sadece bir kez veya günlük haftalık aylık çalışmasını isteyebiliriz.

Aşağıdaki ekranda Gelişmiş ayarlar seçeneğinde ;

  • Repeat task every: 5 dakikada bir bat dosyasının tetiklenmesini istiyorum.
  • Stop all  running task at end of repetition duration: Tüm çalışan görevleri yineleme süresinin sonunda durdur.
  • Delay task for up to: Görevi geciktirme süresi olarak karşımıza çıkmaktadır.
  • Stop task if it runs longer than: Kısmında ise şu süreden uzun çalışırsa görevi durdurabiliriz.
  • Expire: Belirli bir süre sonra belirtilen tarih zaman diliminde biteceğini belirleyebiliriz.

İlgili Trigger ifadesi belirlenirken belirlenen zaman diliminde tetiklenme gerçekleşmesi için ilgili bölümde Enable ifadesinin işaretlenmesi gerekmektedir.

Actions kısmına gelerek oluşturduğumuz “.bat” uzantılı dosyayı Browse.. sekmesinden seçiyoruz. Seçim yaptıktan sonra OK tuşuna basıyoruz.

Actions bölümünde işlemleri tanımladıktan sonra Conditions ve Settings kısmında herhangi bir düzenleme veya değişiklik yapmıyoruz. Aşağıdaki resimde Task’ın oluştuğunu görmekteyiz.

Yukarıda oluşturmuş olduğumuz Task’ı çalıştıralım. Çalıştırmadan önce ilgili klasörün boş olduğunu görelim.

Daha sonra ilgili dosyanın üzerine sağ tıklayıp çalıştırıyoruz. Aşağıdaki resimde görüldüğü gibi manuel bir şekilde de çalıştırılır.

Çalıştırdıktan sonra ilgili klasörler altına dosyalarımızın geldiğini görmüş oluyoruz.

Yukarıda belirtildiği gibi bir trigger tanımlayıp belirlediğiniz bir zaman ve zamanlarda kopyalama işlemini manuel yapabiliriz.

Başka makalede görüşmek dileğiyle..

“Öyle ise emrolunduğun gibi dosdoğru ol.” Hud-112

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir