robocopy

Zaawansowane kopiowanie plików i folderów z obsługą wznawiania i synchronizacji.

robocopy (Robust File Copy) to wbudowane w Windows narzędzie wiersza poleceń do kopiowania i synchronizacji plików oraz całych drzew katalogów. W przeciwieństwie do zwykłego copy czy xcopy potrafi wznawiać przerwane transfery, ponawiać próby przy chwilowych błędach sieci, zachowywać atrybuty i uprawnienia, a także lustrzanie odwzorować folder źródłowy w docelowym. To narzędzie pierwszego wyboru przy migracji danych, backupach i synchronizacji udziałów sieciowych.

Składnia i najważniejsze opcje

Podstawowa składnia wygląda tak: robocopy <źródło> [pliki] [opcje]. Jeśli nie podasz wzorca plików, robocopy domyślnie kopiuje wszystko (*.*) z bieżącego poziomu.

  • /e — kopiuje podkatalogi, łącznie z pustymi (/s robi to samo, ale pomija puste).
  • /mir — tryb lustra: odpowiednik /e + /purge, czyli kopiuje wszystko i kasuje w celu to, czego nie ma w źródle.
  • /z — tryb wznawialny (restartable), przydatny przy dużych plikach przez niestabilną sieć.
  • /copyall — kopiuje wszystkie informacje o pliku (odpowiednik /copy:DATSOU: dane, atrybuty, znaczniki czasu, uprawnienia NTFS, właściciel, audyt).
  • /mt:n — kopiowanie wielowątkowe, n od 1 do 128 (domyślnie 8); mocno przyspiesza przy wielu małych plikach.
  • /r:n i /w:n — liczba ponowień i czas oczekiwania w sekundach między nimi.
  • /l — tryb podglądu: tylko wypisuje, co by zrobił, nic nie kopiuje (świetne do testu przed /mir).
  • /log:plik.txt — zapisuje wynik do pliku zamiast tylko na ekran.

Przykłady użycia

  • robocopy C:\Dane D:\Backup /e — kopiuje cały katalog Dane wraz z podfolderami (także pustymi) do Backup.
  • robocopy \\serwer\udzial D:\Kopia /z /r:3 /w:5 — kopiowanie z udziału sieciowego w trybie wznawialnym, z 3 ponowieniami co 5 sekund.
  • robocopy C:\Projekt D:\Lustro /mir /mt:16 /log:sync.txt — pełna synchronizacja lustrzana na 16 wątkach z logiem do pliku.
  • robocopy C:\Stare D:\Nowe /mir /l — pokazuje, co zostałoby skopiowane i skasowane, bez ruszania danych. Zawsze rób to przed prawdziwym /mir.
  • robocopy C:\Foto D:\Foto *.jpg /copyall — kopiuje tylko pliki .jpg z zachowaniem uprawnień NTFS i właściciela.

Częste błędy i pułapki

Największa mina to /mir: usuwa w celu wszystko, czego nie ma w źródle. Pomylisz kolejność argumentów albo wskażesz pusty katalog źródłowy i wyczyścisz backup. Dlatego najpierw /l. Druga pułapka to domyślne ustawienia /r i /w — bez ich podania robocopy ponawia próbę milion razy, czekając 30 sekund, więc przy jednym zablokowanym pliku potrafi „wisieć” godzinami. Pamiętaj też, że /copyall wymaga uprawnień do odczytu informacji audytu i właściciela — bez praw administratora dostaniesz błędy. I nie zdziw się kodem wyjścia: robocopy zwraca 0-7 jako sukces (np. 1 = skopiowano pliki), a dopiero wartości od 8 w górę oznaczają błąd — odwrotnie niż większość poleceń.

Powiązane komendy: xcopy i copy (prostsze kopiowanie), cp oraz rsync w świecie Linuksa, a także icacls do zarządzania uprawnieniami NTFS.