Robocopy – składnia, parametry, informacje | CMD BEZ TAJEMNIC

Polecenie Robocopy (Robust File Copy – pewne, solidne przenoszenie plików lub kopiowanie wsparte sprzętowo) służy do zaawansowanego transferu folderów i plików za pomocą wiersza poleceń CMD lub Powershell.

[!] Ten poradnik jest częścią projektu CMD BEZ TAJEMNIC – szkolenia z podstaw pisania skryptów opisującego wszystko w możliwie najprostszy sposób, aby każdy mógł zrozumieć.

Treść w <klamrach> oznacza, że trzeba ją uzupełnić. A <n> oznacza, że trzeba tam uzupełnić liczbę lub datę według odpowiedniego formatu (do wszystkiego będą przykłady).

Spis treści

Polecenie robocopy

Robocopy jest komendą kopiującą odwołującą się do wbudowanego w systemie Windows narzędzia Robocopy.exe. Kopiowanie za jego pomocą jest na ogół szybsze, pewniejsze i bardziej zaawansowane. Robocopy potrafi przenosić pliki wielowątkowo. Oznacza to, że nie przesyła każdego pliku po koleji, tylko kilka plików jednocześnie. Przekłada się to na nieporównywalnie szybszy przesył małych plików w porównaniu do rozwiązań, które każdy plik muszą przesyłać pojedyńczo, np. Copy, Xcopy lub Explorator plików Windows (korzysta z xcopy).

Robocopy jest kilkukrotnie szybsze od Exploratora plików Windows, z którego korzystał każdy, kto do tej pory przesyłał pliki w systemie Windows.

Dodatkowo narzędzie ukazuje procentowy progres przenoszenia, co jest szczególnie przydatne w przypadku przenoszenia dużych plików.

Robocopy umożliwia również zdefiniowanie ilości prób kopiowania w przypadku wystąpienia błędów – bez konieczności implementacji warunków oraz pętli w skrypcie – jak miałoby to miejsce w przypadku stosowania komendy xcopy z takim samym zastosowaniem. Nie bez powodu zostało określone narzędziem do Backupów.

robocopy lokalizacja
Narzędzie robocopy.exe znajduje się w folderze systemowym C:\Windows\SysWOW64\

Porównanie xcopy vs robocopy

Xcopy kolejkuje przesyłanie plików, a robocopy może przesyłać wiele plików jednocześnie, to czyni drugie narzędzie znacznie szybszym w przypadku kopiowania dużej ilości małych plików.

Wiele benchmarków mówi tutaj o różnicy rzędu od kilku do kilkunastokrotnie szybszego przesyłu za pomocą robocopy w porównaniu do eksploratora plików Windows (który korzysta z Xcopy). Ogromne znaczenie tutaj ma jednak próbka plików wykorzystywana do porównań obydwu narzędzi. Wiele mniejszych plików wyjdzie na korzyść robocopy, natomiast duże pliki już niekoniecznie.

Komenda Robocopy wydaje się być bardziej rozwiniętą formą Xcopy, ponieważ przenosi pliki szybciej a jej możliwości ustawień są znacznie bardziej zaawansowane. Dodatkowo posiada funkcje, które mogą w docelowym skrypcie zaoszczędzić linijek poleceń. Nie bez powodu robocopy jest nazywane narzędziem do tworzenia kopii zapasowych (backupów).

Robocopy – składnia polecenia i parametry

Składnia polecenia robocopy:

Robocopy <źródłowa_lokalizacja> <docelowa_lokalizacja> [pliki do przesłania] [parametry]

Robocopy można uruchomić wpisując zarówno komendę z .exe jak i bez. Następne są lokalizacje źródłowa oraz docelowa (destynacji). Możemy uwzględnić konkretne pliki do przesłania oraz ustawić odpowiednie opcje/parametry.

Parametry robocopy z opisem

/S = Kopiuje podfoldery.

/E = Kopiuje również podfoldery, ich zawartość oraz puste foldery.

/COPY:<wartość(i)> = Określa dane plików do skopiowania. Domyślna wartość to „DAT” – każda litera oznacza inne dane pliku:

 D = Data
 A = Atrybuty
 T = Przedziały czasowe (stworzenia, edycji pliku)
 S = Bezpieczeństwa NTFS ALS
 O = Informacje o Autorach
 U = Informacje audytowe

/COPYALL = Kopiowanie wszystkich danych plików, odpowiednik /COPY:DATSOU

/SEC = Kopiowanie plików wraz z danymi bezpieczeństwa, odpowiednik /COPY:DATS

/DCOPY:T = Kopiowanie przedziałów czasowych folderów.

/NOCOPY = Nie kopiuje żadnych danych plików. Szczególnie użyteczne w połączeniu z /PURGE

/A = Kopiowanie tylko plików z ustawionym atrybutem gotowy do archiwizacji (właściwości pliku > zaawansowane).

/M = Kopiowanie plików z atrybutem „gotowy do archiwizacji” oraz usuwanie tego atrybutu w plikach źródłowej lokalizacji. Pozwala na łatwe rozpoznanie plików, które zostały już przeniesione.

/LEV:<n> = Kopiowanie tylko n najwyższych poziomów struktury folderu źródłowego. Do wyświetlenia struktury folderów służy polecenie TREE.

/MAXAGE:<n> = Maksymalny wiek pliku. Starsze pliki niż n dni/data nie zostaną przeniesione.

/MINAGE:<n> = Minimalny wiek pliku. Młodsze pliki niż n dni/data nie zostaną przeniesione.

Format daty n = YYYYMMDD , np. 2020022, czyli 26 lutego 2020

/FFT = Wyrównywanie czasów plików FAT. Opcja unika sytuacji, gdy przez inny format daty systemu docelowego starszy plik jest interpretowany jako nowszy. W wyniku czego realnie nowszy plik zostaje nadpisany starszym. Używaj FFT przy przenoszeniu danych na serwer Linuxa lub na inny system nie będący Windowsem.

/256 = Wyłącza przenoszenie ścieżek lokalizacji dłuższych niż 256 znaków (domyślnie wsparcie jest włączone).

Opcje kopiowania i przenoszenia

/L = Podgląd plików do przeniesienia/skopiowania. Robocopy z tą opcją nie przenosi plików ani ich nie kasuje.

/SL = nie podąża za plikami z dowiązaniem symbolicznym (linkami symbolicznymi), zamiast tego tworzy ich kopię.

/Z = Tryb ponownego uruchomienia transferu. Niestabilne połączenia nie przerwą operacji. Robocopy będzie kontynuować w miejscu w którym przerwało przesył.

/B = Przesyła pliki w trybie backupu. Tryb kopii zapasowej umożliwia nadpisanie Robocopy plików i folderów wymagających odpowiednich uprawnień (pod warunkiem, że użytkownik, który zlecił operację, sam posiada odpowiednie uprawnienia).

/XF: <lokalizacja\plik>= Wykluczanie plików, lokalizacji lub plików o danym rozszerzeniu (np. /XF *.doc).

/XD: <lokalizacja\plik> = Wyklucza lokalizacje, np. /XD C:\folder\ – wszystko, co znajduje się we wskazanej lokalizacji, zostanie wykluczone.

/J = Przesyłaj pliki w trybie niebuforowanym I/O. Zalecane dla bardzo dużych plików (nie przeciąża pamięci podręcznej).

/NOOFFLOAD = Kopiowanie plików bez użycia Mechanizmu Windows Offload. Mechanizm Windows Offload sprawia, że komputer nie musi podglądać danych przy przesyłaniu ich pomiędzy lokacjami, do których ma dostęp. Funkcja znacząco optymalizuje transfer. Przykład użycia – stress test lokalnej sieci komputerowej. Jednak w większości przypadków używanie /NOOFFLOAD nie ma sensu.

/ZB = Używa trybu ponownego wznowienia transferu, a w przypadku odmowy dostępu trybu Backupu. Połączenie opcji /Z oraz /B.

/EFSRAW = Kopiuje zaszyfrowane pliki używając trybu EFSRAW (opcja przesyła zaszyfrowane pliki bez ich odszyfrowywania podczas transferu).

/MOV = Przenosi pliki (usuwa w miejscu źródłowym).

/MOVE = Przenosi pliki i strukturę folderów wraz z zawartością. Usuwa pliki w miejscu docelowym.

Wydajnościowe opcje

/R:<n> = Ilość n kolejnych prób skopiowania w przypadku wystąpienia błędów (np. /R:0 – nie próbuje dalej kopiować). Uwaga! Domyślnie Robocopy ma ustawione aż 1 00 000 prób. Domyślne ustawienie może znacząco wydłużyć wszelki transfer.

/W:<n> = Czas n przerwy wyrażony w sekundach pomiędzy kolejnymi próbami skopiowania plików (np. /W:4 – odczeka 4 sekundy). Uwaga! Domyślnie Robocopy ma ustawione 30 sekund pomiędzy próbami.

Opcje ponownej próby

/MON:<n> = Spróbuj jeszcze raz, gdy zostaną wykrytych więcej niż n zmian.

/MOT:<n> = Jeżeli zmiany wystąpiły, podejmij kolejną próbę za n minut.

/RH:<hhmm-hhmm> = Przedział czasowy w którym nowe kopie mogą być rozpoczynane, w formacie hhmm-hhmm – np. 18:00-23:00.

/PF = Sprawdzanie godzin dla każdego pliku oddzielnie (nie na podstawie ogólnego pozwolenia).

/REG = Zapisz ustawienia /R oraz /W jako domyślne ustawienia robocopy w systemie (poprzez edycję wartości w rejestrze).

/IPG:<n> = Przerwa między przesyłanymi pakietami wyrażona w milisekundach n (1 ms = 1/1000 sekundy). Funkcja zwalnia przepustowość na wolnych łączach.

/TBD = Ponowi przesyłanie jeżeli wystąpi błąd Network Name Not Found.

/MT:<n> = Kopiowanie wielowątkowe (przesyłanie kilku plików jednocześnie). Ilość wątków wyrażona w n (domyślnie jest to 8 wątkow). Maksymalna obsługiwana przez Robocopy ilość wątków to 128. Uwaga! Parametr /MT nie może być używany wraz z /IPG oraz /EFSRAW. Ważne: Przekierowanie danych wyjściowych za pomocą /LOG do pliku tekstowego dodatkowo poprawi wydajność.

Opcje destynacji

/A+:<n> = Nadaj przeniesionym plikom i katalogom atrybut(y) n.

/A-:<n> = Usuń wybrane atrybuty n z plików i katalogów docelowych.

/FAT = Tworzy pliki docelowe przy użyciu konwencji nazw plików 8.3 filename (krótkich nazw plików – kompatybilnych ze starymi systemami).

/CREATE = Tworzy strukturę folderów oraz tylko pliki o zerowej długości.

/DST = Koryguje daty plików o 1 godzinne różnice stref czasowych DST.

/PURGE = Usuwa foldery w docelowej lokalizacji jeżeli nie znajdują się one w źródłowej destynacji.

/MIR = Klonuje całą strukturę folderów i zawartości. Funkcja służy do tworzenia Backupów. Uwaga! Może usunąć aktualnie znajdujące się pliki w docelowym miejscu jeżeli nie ma ich w źródłowej strukturze. Połączenie opcji /PURGE oraz /E.

Opcje tworzenia logów

/NP = Robocopy nie wyświetla % procentowego progresu przesyłu.

/LOG:<lokalizacja\plik> = Eksportuje dane wyjściowe do dziennika (log) pliku tekstowego <plik> znajdującego się w <lokalizacja>. Nadpisuje istniejący dziennik.

/LOG+:<lokalizacja\plik> = Eksportuje dane wyjściowe przesyłania do istniejącego pliku dziennika, nie usuwając poprzedniej zawartości pliku.

/UNICODE = wyświetla odpowiedź przy użyciu zestawu znaków UNICODE, obejmującego wszystkie języki na świecie (w założeniu).

/UNILOG:<lokalizacja\plik> = Eksportuje dane dziennika do istniejącego pliku tekstowego (nadpisując go) przy zgodności z UNICODE.

/UNILOG+:<lokalizacja\plik> = Eksportuje dane dziennika do istniejącego pliku tekstowego (uzupełniając go) przy zgodności z UNICODE.

/TS = Uwzględnia w danych wyjściowych znaczniki czasu pliku źródłowego.

/FP = Zawiera pełne nazwy ścieżek plików w danych wyjściowych.

/NS = Nie rejestruje rozmiarów plików.

/NC = Nie rejestruje klas plików.

/NFL = Nie rejestruje nazw plików.

/NDL = Nie rejestruje nazw folderów.

/TEE = Wyświetla dane wyjściowe w oknie konsoli oraz w pliku dziennika.

/NJH = Dane bez nagłówka zadania.

/NJS = Dane bez podsumowania zadań.

/SECFIX = Naprawia zabezpieczenia we właściwościach wszystkich plików – również w pominiętych.

/TIMFIX = Naprawia czasy plików we wszystkich plikach – również pominiętych.

Opcje typowania plików przez robocopy

/XO = Wyklucza pliki starsze niż kopia w katalogu źródłowym.

/XC = Wyklucza istniejące pliki z takim samym przedziałem czasowym

/XN = Wyklucza wszystkie nowsze pliki (nowsze niż te w miejscu docelowym).

/XL = Wyklucza „samotne” pliki i foldery, czyli te obecne w źródle lecz nieobecne w miejscu docelowym. Chroni przed dodaniem nowych plików do miejsca przeznaczenia (nadpisuje obecne tam pliki).

/XX = Wyklucza ekstra pliki oraz foldery (obecne w źródle ale nieobecne w miejscu docelowym).

/IA:<n> = Uwzględnia pliki o podanych atrybutach n.

/XA:<n> = Wyklucza pliki o podanych atrybutach n.

/IS = Uwzględnia takie same pliki. Nadpsuje pliki nawet jeżeli w miejscu docelowym są one identyczne.

/IT = Uwzględnia pliki poprawione. Są to pliki o takiej samej nazwie, rozmiarze oraz czasach edycji lecz o innych atrybutach.

/XJ = Wyklucza skróty.

/XJD = Wyklucza skróty do folderów.

/XJF = Wyklucza skróty do plików.

/MAX:<n> = Ustala maksymalny rozmiar przenoszonych plików jako n bajtów (wyklucza wszystkie większe pliki).

/MIN:<n> = Ustala minimalny rozmiar przenoszonych plików jako n bajtów (wyklucza wszystkie mniejsze pliki).

/MAXLAD:<n> = Wyklucza pliki nieużywane od n (format: n, czyli ilość dni np. 30 – 30 dni lub data YYYYMMDD, np. 20210112 – nie używane od 12 stycznia 2021 roku)

/MINLAD:<n> = Wyklucza pliki używane od n (format: n, czyli ilość dni, np. 20 – 20 dni lub data YYYYMMDD, np. 20210701 – używane od 1 lipca 2021 roku).

/BYTES = Przedstawia wielkości plików tylko w bajtach.

/X = Notuje wszystkie ponad normowe pliki, nie tylko przeznaczone do przeniesienia i skopiowane.

/V = Tworzy rozszerzone podsumowanie (log), ukazując pominięte pliki.

/ETA = Pokazuje szacowany czas przesyłania plików

/DEBUG = Ukazuje informacje przydatne w debugowaniu. Mającym na celu redukcję liczby błędów w skrypcie.

Przykłady zastosowania Robocopy wraz z opisem

Przykładowe zastosowanie polecenia Robocopy:

robocopy \przykład d:\ /E /R:1 /W:10 /A-:SH

Robocopy skopiuje folder „przykład” z bieżącego dysku (:\przykład) wraz z całą strukturą i zawartością (/E) do głównego katalogu dysku D (D:\). Dodatkowo komenda (w razie wystąpienia błędów) powtórzy przesyłanie plików 1 dodatkowy raz (/R:1) lecz przed tym odczeka 10 sekund (/W:10). Dodatkowy atrybut /A jest opisany tutaj i znalazł się tu nie bez powodu.

robocopy C:\katalog \\serwer\backup /MOVE /ZB

Robocopy prześle pliki (/MOVE) z folderu „katalog” na dysku C komputera na dysk sieciowy „serwer” do folderu „backup”. Przy zachowaniu trybu wznowienia transferu na wypadek niestabilności połączenia oraz wykorzystując poświadczenia użytkownika (/ZB).

Robocopy ukrywa pliki – musisz to wiedzieć

Robocopy posiada błąd przez który często ukrywa docelowy folder oraz pliki po zakończonym przenoszeniu lub kopiowaniu. Co ciekawe nawet ustawienie podglądu ukrytych plików ich nie wyświetli, bo zostaje im dodatkowo nadany atrybut plików systemowych. Foldery docelowe oraz ich zawartość wciąż jednak znajdują się na dysku – po ręcznym wpisaniu ich ścieżki również się wyświetlą. Aby uniknąć ukrywania docelowej lokalizacji w poleceniach z robocopy dodawaj zawsze: /A-:SH

Jeżeli pliki za pomocą robocopy zostały już przeniesione a docelowy folder został ukryty, wpisz w CMD uruchomionym jako administrator komendę:

ATTRIB -S -H <lokalizacja katalogu lub pliku> 

Na przykład:

ATTRIB -S -H C:\folder

Po kliknięciu Enter ukryta lokalizacja zostanie przywrócona do widoczności.

Przesyłanie wielowątkowe Robocopy – ile wątków wykorzystać ?

Przesyłanie wielowątkowe czyni robocopy wyjątkowym na tle innych komend do kopiowania, za sprawą możliwości kopiowania kilku plików jednocześnie (wszystkie inne komendy kolejkują przesyłanie). To sprawia, że komenda potrafi w wielu przypadkach przesyłać pliki od kilku do kilkunastu razy szybciej niż eksplorator plików Windows, który korzysta z Xcopy.

Aby wykorzystać w pełni możliwości robocopy ważnym jest ustalenie odpowiedniej ilości wątków za pomocą parametru /MT (Multithreading – wielowątkowość). Domyślną wartością komendy jest 8 wątków, czyli /MT:8.

Ile wątków wykorzystać?

Na to pytanie niestety nie da się jednoznacznie odpowiedzieć, każdy sprzęt jest inny i inaczej zniesie przesyłanie wielowątkowe. Podzespołami mającymi wpływ na przesyłanie wielowątkowe są: procesor (jego szybkość, rdzenie oraz wątki), płyta główna (jej kontrolery do przesyłu danych), pamięć RAM (szybkość, wielkość i opóźnienie) oraz same dyski urządzenia (szybkość dysku, pamięć podręczna dysku oraz jego kontroler pamięci) lub – w przypadku przesyłu na dysk sieciowy – połączenie internetowe i stabilność sieci. Jak widać jest tu sporo zmiennych. A to nie wszystko – wpływ ma również przesyłana zawartość – czy są to ogromne pliki, czy też małe pliki, których sporo.

Zbyt duża ilość wątków może nawet niemal całkowicie ograniczyć przesyłanie (gdy pamięć podręczna się przepełni) i sprawić, że komputer zacznie się przeciążać.

Rozwiązanie?

Warto więc przeprowadzić wstępnie własne testy sprawnościowe komputera ustalając indywidualną ilość wątków. Przy doborze ilości wątków kieruj się ogólnymi zasadami:

  • Czym więcej małych plików, tym więcej wątków.
  • Czym więcej dużych plików, tym mniej wątków.
  • Czym wolniejszy procesor, tym mniej wątków. Czym szybszy, tym więcej.
  • Czym wolniejsze dyski, tym mniej wątków. Czym szybsze, tym więcej.

Warto wiedzieć, że ilość wątków robocopy nie jest ograniczona przez ilość wątków samego procesora (tu chodzi o inne wątki).

CMD BEZ TAJEMNIC

Źródło merytoryczne – oficjalna baza wiedzy Microsoft (tylko po angielsku).