Robocopy.exe – zaawansowane kopiowanie, synchronizowanie i raportowanie danych

strong_CMD_150Robocopy.exe, to narzędzie działające w Wierszu Poleceń Windows stworzone z myślą o replikacji lub migracji plików i katalogów pomiędzy serwerami. Tworzenie loga z wynikiem operacji, działanie jak skrypt/usługa, czy możliwość wznawiania nieudanej operacji czyni to narzędzie niezwykle poręcznym i lepszym niż większość programów GUI. Ponadto Robocopy.exe działa wielowątkowo (domyślnie obsługuje 8 plików w tym samym czasie), co wyraźnie skraca czas migracji danych.
Narzędzie to znajduje się w systemach od Visty/2008 w górę.

Oto praktyczne przykłady zastosowania Robocopy.exe:

Najprostsza możliwa operacja, czyli kopiowanie zawartości katalogu C:\Folder1 do C:\Folder2 pomijając puste katalogi:

robocopy.exe C:\Folder1 C:\Folder2

Kopiowanie zawartości katalogu C:\Folder1 do C:\Folder2 wraz z pustymi katalogami:

robocopy.exe C:\Folder1 C:\Folder2 /E

Wyświetlenie plików większych niż 1MB (1024 bajty):

robocopy.exe c:\Folder1 d:\folder_docelowy /min:1024 /l

Należy zaznaczyć, że folder docelowy jest obowiązkowy, lecz żadne pliki nie zostaną przekopiowane. Odpowiada za to parametr /l. Wynik polecenia będzie podobny do tego:

robocopy1

Wyświetlenie plików MNIEJSZYCH niż 1MB (1024 bajty)

robocopy.exe c:\Folder1 d:\folder_docelowy /max:1024 /l

Zapisanie wyniku do loga:

robocopy.exe c:\Folder1 d:\folder_docelowy /LOG:c:\log.txt

Przeniesienie plików starszych niż 7 dni (oprócz plików będących w użyciu)

robocopy.exe c:\Folder1 d:\folder_docelowy /move /minage:7

W tym miejscu podam kilka podobnych opcji

/maxage: pliki NIE-starsze niż N dni

/minage: pliki NIE-młodsze niż N dni

/maxlad: pliki nie używane krócej niż N dni

/minlad: pliki nie używanie dłużej niż N dni

Jeżeli N przekracza liczbę 1900 należy podać datę w formacie RRRRMMDD

 

Mirror, czyli synchronizowanie katalogów

To polecenie zsynchronizuje dwa katalogi – skopiuje pliki i katalogi (również puste) do katalogu docelowego, a także skasuje z katalogu docelowego pliki i katalogi, których już nie ma w katalogu źródłowym.

robocopy.exe \\server1\udział \\server2\udział /MIR

…lub to samo dla dysków X(źródłowy) i Y (docelowy):

robocopy.exe X:\DIR Y:\DIR /MIR

 

Zaawansowane synchronizowanie udziałów sieciowych:

robocopy.exe \\server1\udział \\server2\udział /MIR /FFT /Z /XA:H /W:2

/FFT używa datowania system FAT zamiast NTFS.

/Z pozwala wznowić zadanie zamiast rozpoczynać je od nowa (na przykład w przypadku starty połączenia sieciowego)

/XA:H ignoruje ukryte pliki

/W:2 zmniejsza czas ponownej próby z domyślnych 30 sekund na 2.

 

Kopiowanie różnicowe, czyli backup z użyciem robocopy.exe

To polecenie skopiuje nam tylko pliki i katalogi zmodyfikowane w ciągu 1 dnia:

robocopy.exe „c:\folder1” „c:\backup-%date% ” /MAXAGE:1

Upewnijcie się tylko, czy Wasz format daty zawiera dozwolone znaki. U mnie na przykład jest to RRRR-MM-DD.

 

Przenoszenie uprawnień, atrybutów, lub dat z użyciem Robocopy.exe

Oto przykład kopujacy uprawnienia (ACL)

robocopy.exe c:\folder1 c:\folder2 /Copy:S /IS /IT

D dane

A atrybuty

T czasy

S uprawnienia NTFS

O właściciele

U informacje audytowe

Jak pewnie zauważyliście, domyślne kopiowanie (robocopy.exe C:\Folder1 C:\Folder2
) zawiera w sobie ukryte: /Copy:DAT
/IS – od „Include same files”, czyli takie, które już istnieja w katalogu docelowym, mają ten sam rozmiar, czas i atrybut.

/IT – od “Include tweaked files”, czyli takie które już istnieją w katalogu docelowym, mają ten sam rozmiar i czas, ale inny atrybut.

Wspomniana we wstępie wielowątkowość domyślnie wynosi 8. Możemy zwiększyć ten parametr np. do 24:

robocopy.exe C:\Folder1 C:\Folder2 /MT:24

Kopiowanie katalogów wraz z czasem (timestamp) głównego katalogu:

robocopy.exe C:\Folder1 C:\Folder2 /MIR /dcopy:T

 

Limit zużycia łącza

Parametr /IPG:750 ograniczy zużycie łącza do około 1Mbps, co sprawi, że transfer danych nie spowoduje problemów sieciowych 🙂

robocopy.exe /ipg:750 \\serwer1\udział \\server2\udział

Myślę, że powyższe przykłady z grubsza prezentują niesamowita wszechstronność narzędzia robocopy.exe. Jeśli szukacie narzędzia, które pozwala kasować pliki po dacie modyfikacji, zachęcam do zapoznania się z FORFILES.
Jeśli macie jakieś pytania lub komentarze, piszcie śmiało 🙂

Łukasz Skalikow

Obecnie Manager IT. Przez lata byłem Inżynierem systemów. Jestem entuzjastą i specem od vSphere, Windows serwer, GPO. Od zawsze byłem zwolennikiem wiersza poleceń i automatyzacji. Obecnie, ze względu na pracę, rodzinę i wyjazdy służbowe, dużo mniej udzielam się na blogu, ale mam nadzieję, że pośród kilkuset porad opublikowanych na spece.it, wiele osób znajdzie dla siebie coś przydatnego :)

Przeczytaj także...

20 komentarzy

  1. Anonim pisze:

    Dzięki za przedstawienie kolejnego ważnego narzędzia admina 🙂 Niestety wkradły się drobne literówki do artykułu np. synhronizacji

  2. Benko pisze:

    Chciałbym np. o godz. 16.00 podłączyć pena do mojego laptopa i chciałbym aby ustawić w harmonogramie zadań aby mi nadpisało tylko zmodyfikowane pliki lub skopiowało nowe pliki z jakiegoś określonego miejsca na lapku. Da się? Czy to robi się gdzie indziej?

    • Łukasz Skalikow pisze:

      Ok, ale z czym konkretnie masz problem? Skonfigurowanie zadania w harmonogramie chyba nie wymaga wyjaśnienia. Wystarczy tam wpisać częstotliwość (np codziennie), godzinę i komendę np: robocopy.exe c:\katalog f:\katalog /MIR

      Musisz jedynie upewnić się, że pendrive widziany jest zawsze pod tą samą litera (gdy na przykład włożysz kartę SD lub podepniesz dysk usb, to litera, którą powinien mieć pendrive będzie inna).

  3. Anonim pisze:

    Witam…
    Szukam komendy/polecenia umożliwiającego wykonania kopii plików. Problem polega na tym, że chciałbym aby w jednym wierszu zawarte były dwa polecenia wykonania kopiowania różnych plików do tego samego katalogu.
    Krzysztof Kozłowski

    • Zoidberg pisze:

      Próbowałeś łączyć polecenia za pomocą && ?

      komenda1 && komenda2 && komenda3

    • Anonim pisze:

      Dziękuję, działa…
      pozdrawiam
      Krzysztof Kozłowski

  4. Anonim pisze:

    Działa, dziękuję bardzo
    pozdrawiam
    Krzysztof Kozłowski

  5. ppeppe pisze:

    A ja chciałbym poprosić o polecenie, które będzie kopiować z dysku C:\program files/test/g*.txt pliki(g*.txt) na dysk D:\kopia, ale tak ażeby nie nadpisywał tych pików(g*.txt) na dysku D. Ma kopiować tylko nowe nazwy.

  6. Krump pisze:

    Witam, ja mam małe pytanko, otóz robiaz kopie profilów wyłaczam zkopiowania katalog C:Users%username%AppData, ale chce z niego skopiować %appdata%MicrosoftSignatures*.* jest to możliwe? jakie dać uwzględnienie bo opcja /IF nie działa

    • A jakbyś robił kopiowanie w 2 wersach? W jednym wersie kopiował %appdata%MicrosoftSignatures*.* a w drugim cały profil z wykluczeniem całego C:Users%username%AppData? To trochę partyzanka, ale powinno działać.

    • Krump pisze:

      Własnie wiem, że tak mogę zrobić, ale chciałem tego uniknąć i zrobic to porządnie, dlatego pytam.

    • Śmiem stwierdzić że w Robocopy nie da się jednocześnie wykluczyć folderu z wyjątkiem jednego lub kilku wskazanych. Potwierdzają to różne fora, jakie wczoraj przejrzałem. Myślę, że twórcy specjalnie na to nie pozwalają, bo przy wielu folderach, performance byłby strasznie zdegradowany.

    • Krump pisze:

      to kicha bo psuje to troche życie

  7. mruk pisze:

    Bardzo fajny artykuł, lecz ja mam trochę inne zapytanie.

    Chodzi o kopiowanie po sieci z jednego komputera PC1 katalogu (baza wraz z
    podkatalogami i znajdującymi się tam plikami) na drugi PC4. Obydwa komputery są
    w tej samej sieci lan.

    Kopie mają być robione co tydzień oraz 1 raz w miesiącu.

    Zależy mi by nazwa kolejnej kopii otrzymywała nazwę w postaci dzień miesiąc rok
    i oznaczeń literowych.

    Gdzie „t” gdy chodzi o tydzień a z literką „m” gdy chodzi o
    miesiąc. Wymyśliłem sobie, że wszystko oprę o harmonogram zadań. Wszystkie
    komputery mają W7 prof.

  8. DK pisze:

    Czy da się tym kopiować same atrybuty i uprawnienia (zabezpieczenia) folderów?

  9. tex666 pisze:

    Proszę o pomoc. Gdy ręcznie wpiszę komendę w cmd wszystko działa. Gdy tą samą komendę uruchamiam w .bat dostaję błąd 1326 – brak uprawnień. Nie mogę się dostać do pliku źródłowego.
    Plik źródłowy jest na innym kompmie.
    Dzięki 🙂

  10. Marek pisze:

    A jak sobie poradzić z takim cudem przy Robocopy??? 2017/10/03 17:40:54 ERROR 5 (0x00000005) Changing File Attributes G:System Volume Information
    Odmowa dostępu.

  11. vviking pisze:

    Ja mam pytanie trochę innej natury.W połączeniu rdp do zdalnego komputera udostępniam również wskazany zasób ze swojego komputera, np. H:/. Po pojawieniu się pulpitu zdalnego, w Mój komputer pojawia się zasób sieciowy – „dysk sieciowy”, ale… jego adresu nie rozpoznaje linia komend, bo skopiowaniu adresu z paska adresu i wklejeniu do Wiersza Poleceń uzyskuje coś takiego: „KomputerH na 14Z”. Z takim zapisem WP nie potrafi sobie poradzić. Potrzebuję w ten sposób mapować swój zasób sieciowy w konkretnej aplikacji na zdalnym komputerze – zarówno aplikacja ani WP nie przyjmują takiego formatu zasobu sieciowego. Jak to rozgryźć?

  12. lawek333 pisze:

    tex666 odpal plik .bat jako administrator klikając na niego prawym przyciskiem myszy

  13. k2i pisze:

    w logu/posumowaniu po wykonaniu polecenia robc0opy mam krzaczki (brak polskich liter), próbowałem ustawiac stronę kodowania znaków ale może robię coś źle, help

Dodaj komentarz