Selamlar Bu dersimizde sizlere ROBOCOPY’i anlatmaya çalışacağım.
Neden Robocopy kullanmalıyız. 256 karakterden daha fazla dosya adı olan dosyaların taşınması ve bu dosyalar ile ilgili loğların tutulması, dosya türlerini hariç ve ya dahil tutarak kopyalama yapmamızı, Klasörlerimizi NTFS ve Paylaşım izinleriyle birlikte farklı bir bilgisayara taşırken, oldukça boyutlu klasörlerinizde yedekleme yaparken değişmeyen içerik ve klasörleri hariç tutarak, değişen içerikleri kopyalanmasını sağlamamız mümkün olacaktır.
Bu programcığın diğer özelliklerini ayrıntılı olarak görmek isterseniz CMD’yi açtıktan sonra robocopy /? Diğer bilgilerine de ulaşmanız mümkündür.
Genel kullanım Syntax’ı aşağıdaki gibidir;
ROBOCOPY <Kaynak_Path> <Hedef_Path> <Secenekler>
Seçenekler :
Kopyalama seçenekleri:
/S = alt dizinleri kopyala; boş olanlar hariç.
/E = alt dizinleri kopyala; boş olanlar dahil.
/LEV:n = kaynak dizin ağacının yalnızca en üst n düzeyini kopyala.
/Z = dosyalarını yeniden başlatılabilir modda kopyala.
/B = Dosyaları yedekleme modunda kopyala.
/ZB = yeniden başlatılabilir modu kullan; erişim reddedilirse yedekleme modunu kullan.
/EFSRAW = tüm şifreli dosyaları EFS RAW modunda kopyala.
/COPY:kopyabayrak = dosyalar için neler kopyalanacak.
(varsayılan: /COPY:DAT).
(kopyabayrak: D = veri, A = öznitelikler, T = zaman damgası).
(S = güvenlik = NTFS ACL’leri, O = sahip bilgisi, U = denetleme bilgisi).
/DCOPY:T = dizin zaman damgalarını kopyala.
/SEC = dosyaları güvenlikle birlikte kopyala (/COPY:DATS ile aynı).
/COPYALL = tüm dosya bilgilerini kopyala (/COPY:DATSOU ile aynı).
/NOCOPY = hiçbir dosya bilgisini kopyalama (/PURGE ile kullanışlıdır).
/SECFIX = tüm dosyalarda güvenliği düzelt; atlanan dosyalarda bile.
/TIMFIX = tüm dosyalarda dosya saatlerini düzelt; atlanan dosyalarda bile.
/PURGE = artık kaynakta bulunmayan hedef dizinleri/dosyaları sil.
/MIR = dizin ağacını yansıt (/E ve /PURGE birleşimi ile aynı).
/MOV = dosyaları taşı (kopyaladıktan sonra kaynaktan sil).
/MOVE = dosya ve dizinleri taşı (kopyaladıktan sonra kaynaktan sil).
/A+:[RASHCNET] = kopyalanan dosyalara belirtilen öznitelikleri ver.
/A-:[RASHCNET] = kopyalanan dosyalardan belirtilen öznitelikleri kaldır.
/CREATE = yalnızca dizin ağacını ve uzunluğu sıfır olan dosyaları oluştur.
/FAT = hedef dosyaları yalnızca 8.3 FAT dosya adları kullanarak oluştur.
/256 = çok uzun yol (> 256 karakter) desteğini kapat.
/MON:n = kaynağı izle; n taneden fazla değişiklik olduğundan yeniden çalış.
/MOT:d = kaynağı izle; d dakika içinde değişiklik olursa yeniden çalış.
/RH:ssdd-ssdd = çalışma saatleri; yeni kopyaların başlatılabileceği saatler.
/PF = çalışma saatlerini dosya (geçiş değil) bazında denetle.
/IPG:n = paketler arası boşluk (ms); yavaş hatlarda bant genişliğini boşaltmak için.
/SL= sembolik bağlantıları hedefe kopyalar.
/MT[:n] = n iş parçacığı olan çok iş parçacıklı kopya oluşturun (varsayılan 8).n, en az 1, en çok 128 olmalıdır.Bu seçenek /IPG ve /EFSRAW seçenekleriyle uyumlu değildir.Daha performans için çıktıyı /LOG seçeneğiyle yeniden yönlendirin.
Dosya Seçimi Seçenekleri :
/A = yalnızca arşiv özniteliği ayarlı olan dosyaları kopyala.
/M = yalnızca arşiv özniteliği olan dosyaları kopyala ve özniteliği sıfırla.
/IA:[RASHCNETO] = yalnızca belirtilen özniteliklerden herhangi birine sahip olan dosyaları dahil et.
/XA:[RASHCNETO] = belirtilen özniteliklerden herhangi birine sahip olan dosyaları dışta tut.
/XF dosya [dosya]… = verilen adlar/yollar/joker karakterler ile eşleşen dosyaları dışta tut.
/XD dizin [dizin]… = verilen adlar/yollar ile eşleşen dizinleri dışta tut.
/XC = değişen dosyaları dışta tut.
/XN = yeni dosyaları dışta tut.
/XO = eski dosyaları dışta tut.
/XX = fazlalık dosya ve dizinleri dışta tut.
/XL = yalnız dosya ve dizinleri dışta tut.
/IS = aynı dosyaları dahil et.
/IT = ayarlanmış dosyaları dahil et.
/MAX:n = en büyük dosya boyutu; n bayttan büyük dosyaları dışta tut.
/MIN:n = en küçük dosya boyutu; n bayttan küçük dosyaları dışta tut.
/MAXAGE:n = en çok dosya yaşı; n gün/tarihten eski dosyaları dışta tut.
/MINAGE:n = en az dosya yaşı; n gün/tarihten yeni dosyaları dışta tut.
/MAXLAD:n = en çok son erişim tarihi; n’den bu yana kullanılmayan dosyaları dışta tut.
/MINLAD:n = en az son erişim tarihi; n’den bu yana kullanılan dosyaları dışta tut.(n < 1900 ise n = n gündür, değilse n = YYYYAAGG biçiminde tarihtir).
/XJ = birleşim noktalarını dışta tut. (normalde varsayılan olarak dahildir).
/FFT = dosya zamanlarını FAT kabul et (2 saniye kesinliğinde).
/DST = bir saatlik DST saat farklarını dengele.
/XJD = dizinler için birleşim noktalarını dışta tut.
/XJF = dosyalar için birleşim noktalarını dışta tut.
Yeniden Deneme Seçenekleri :
/R:n = başarısız kopyalamalarda yeniden deneme sayısı; varsayılan: 1 milyon.
/W:n = Yeniden denemeler arasında bekleme süresi; varsayılan: 30 saniye.
/REG = /R:n ve /W:n değerlerini varsayılan ayar olarak kayıt defterine kaydet.
/TBD = paylaşım adlarının tanımlanmasını bekle (yeniden deneme hatası 67).
Günlük Seçenekleri :
/L = Yalnızca listele; dosyaları kopyalama, zaman damgası vurma ve silme.
/X = yalnızca seçili olanları değil tüm fazla dosyaları rapor et.
/V = ayrıntılı çıktı üret; atlanan dosyaları göster.
/TS = çıktıda kaynak dosya zaman damgalarını göster.
/FP = çıktıda dosyaların tam yol adını göster.
/BYTES = boyutları bayt olarak yaz.
/NS = boyut yok; dosya boyutlarını günlüğe yazma.
/NC = sınıf yok; dosya sınıflarını günlüğe yazma.
/NFL = dosya listesi yok; dosya adlarını günlüğe yazma.
/NDL = dizin listesi yok; dizin adlarını günlüğe yazma.
/NP = ilerleme yok; kopyalanan yüzdeyi görüntüleme.
/ETA = kopyalanan dosyalar için tahmini varış saatini göster.
/LOG:dosya = durumu günlük dosyasına yaz (varolan günlüğün üzerine yaz).
/LOG+:dosya = durumu günlük dosyasına yaz (varolan günlüğün sonuna ekle).
/UNILOG:dosya = durumu günlük dosyasına Unicode olarak yaz (varolan günlüğün üzerine yaz).
/UNILOG+:dosya = durumu günlük dosyasına Unicode olarak yaz (varolan günlüğün sonuna ekle).
/TEE = çıktıyı hem günlük dosyasına hem de konsol penceresine gönder.
/NJH = iş üstbilgisi yok.
/NJS = iş özeti yok.
/UNICODE = durumu Unicode olarak yaz.
İş Seçenekleri :
/JOB:işadı = parametreleri iş dosyasından al.
/SAVE:işadı = parametreleri adı verilen iş dosyasına kaydet
/QUIT = komut satırını işledikten sonra çık (parametreleri görüntülemek için).
/NOSD = kaynak dizin belirtilmedi.
/NODD = hedef dizin belirtilmedi.
/IF = aşağıdaki dosyaları dahil et.
Örnekler :
– Robocopy.exe C:\data” “D:\data” /S /E /V /NP /R:1 /W:0 /ETA
Pause
Bu örneğimizde Robocopy.exe yi kullanarak belirlenen yolda ki dosyaları kopyalamış bulunuyoruz. Ve bunu bat dosyası haline getiriyoruz.
– robocopy C:\Users\Jacob T:\DesktopPC\C-Drive\Users\Jacob /MIR /XA:SH /W:0 /R:1 /REG /XJ >> C:\externalbackup.log
– robocopy.exe \\ipadresi\Kopyalanacak yerin adresi \\ipadresi\Yapıştırılacak yerin adresi\b$\ERW_Backup *.txt /maxage:1
rename \\ipadresi\Yapıştırılacak yerin adresi*.* değiştirelecekdosyaismi.txt
pause
pause komutu cmd ekranının kapanmamasını ve yapılan işlemleri görüntülememize yaramaktadır.
*.txt yazılan yer sadece txt uzantılı dosyaları cekmek için ayarlanmıştır, dilediğiniz dosya uzantısını göre düzeltebilir yada hepsini seçmek için .* yapılarak tüm dosyalar çekilebilir.
rename kısmı çekilen dosyanın ismini değiştirmemize yarar.
maxage:1 ise bugun tarihli dosyaları cekmeye yaramaktadır
– @ECHO OFF
SETLOCAL
SET _source=\\FileServ1\e$\users
SET _dest=\\FileServ2\e$\BackupUsers
SET _what=/COPYALL /B /MIR
:: /COPYALL :: COPY ALL file info
:: /B :: copy files in Backup mode.
:: /MIR :: MIRror a directory tree
SET _options=/R:0 /W:0 /LOG:C:\batch\RoboLog.txt /NFL /NDL
:: /R:n :: number of Retries
:: /W:n :: Wait time between retries
:: /LOG :: Output log file
:: /NFL :: No file logging
:: /NDL :: No dir logging
ROBOCOPY %_source% %_dest% %_what% %_options%
yararlı olması dileğiyle.
Bilgi için teşekkürler.Güzel çalışma olmuş.
Yararlı olmasına sevindim. Kolaylıklar dilerim.
Üstadım merhaba
aşağıdaki gibi bir kod yazarak günlük tarih ve saatli yedek alma işlemi gerçekleştiriyorum. benım sorum şu robocopy komutunu kullandığım satırda herhangi bır sekılde kopyalamada eksik dosya veya kopyalama gerçekleşmeyen bir problem olduğunda robocopy satırını 5 kere denesin buna rağmen kopyalama olmadı ıse bana bır uyarı bildirsin istiyorum. bunu nasıl yapa bilirim?
yardımcı olursanız sevinirim.
set yedeklenecek=C:\drivers
set yedekler=d:\datalog
set CUR_YYYY=%date:~10,4%
set CUR_MM=%date:~4,2%
set CUR_DD=%date:~7,2%
set CUR_HH=%time:~0,2%
if %CUR_HH% lss 10 (set CUR_HH=0%time:~1,1%)
set CUR_NN=%time:~3,2%
set SUBFILENAME=%CUR_MM%%CUR_DD%%CUR_YYYY%-%CUR_HH%%CUR_NN%%CUR_SS%
robocopy “%yedeklenecek%” “%yedekler%\yedek_%SUBFILENAME%” /MOVE /MIR
set WINRAR=”C:\Program Files\WinRAR\RAR.exe”
%WINRAR% a “%yedekler%\yedek_%SUBFILENAME%.rar” “%yedekler%\yedek_%SUBFILENAME%
rmdir /s /q “%yedekler%\yedek_%SUBFILENAME%
pause
Selamlar, Bence bunu python komutları ile yapman daha doğru olabilir. 🙂
hocam pyton bılsem neler neler yaparım ben bunları arastırarak butunlıye bıldım bundan oturu sordum acaba komut ıle yardımcı ola bılırmısın?
Selamlar tekrardan bende bayadır bakmıyorum biraz uzağım bu konulara ama birde artık python bilmene gerek yok az bişi yazılım mantığı oturduysa ChatGPT abi her şeyi mükemmel yazıyor. En fazla oraya yönlendirebilirim bunun için. 🙂
@echo off
set yedeklenecek=C:\drivers
set yedekler=d:\datalog
set CUR_YYYY=%date:~10,4%
set CUR_MM=%date:~4,2%
set CUR_DD=%date:~7,2%
set CUR_HH=%time:~0,2%
if %CUR_HH% lss 10 (set CUR_HH=0%time:~1,1%)
set CUR_NN=%time:~3,2%
set CUR_SS=%time:~6,2%
set SUBFILENAME=%CUR_MM%%CUR_DD%%CUR_YYYY%-%CUR_HH%%CUR_NN%%CUR_SS%
set retry_count=0
set max_retries=5
:retry
robocopy “%yedeklenecek%” “%yedekler%\yedek_%SUBFILENAME%” /MOVE /MIR
if %errorlevel% lss 8 (
rem If robocopy was successful (exit code less than 8)
set retry_count=0
goto compress
) else (
set /a retry_count+=1
if %retry_count% geq %max_retries% (
echo [ERROR] Yedekleme islemi 5 kez basarisiz oldu!
goto end
)
echo [INFO] Yedekleme basarisiz oldu, tekrar deneniyor… (%retry_count%/%max_retries%)
goto retry
)
:compress
set WINRAR=”C:\Program Files\WinRAR\RAR.exe”
%WINRAR% a “%yedekler%\yedek_%SUBFILENAME%.rar” “%yedekler%\yedek_%SUBFILENAME%”
rmdir /s /q “%yedekler%\yedek_%SUBFILENAME%”
echo Yedekleme tamamlandi.
rem 60 gün önceki eski dosyaları sil
echo [INFO] 60 günden eski yedekler temizleniyor…
forfiles /p “%yedekler%” /m *.rar /d -60 /c “cmd /c del @path”
rem Dosya silinip silinmediğini kontrol et
forfiles /p “%yedekler%” /m *.rar /d -60 | findstr /i “.rar” > nul
if %errorlevel% neq 0 (
echo [INFO] 60 günden eski yedekler bulunamadi, silme islemi yapilamadi.
) else (
echo [INFO] Eski yedekler silindi.
)
:end
pause
tesekkur ederım