Windows / cmd.exe / PowerShell

Manuál příkazu robocopy

Kompletní referenční příručka k Robocopy (Robust File Copy) — nástroji příkazové řádky pro spolehlivé kopírování a zrcadlení souborů a adresářů ve Windows, včetně sítí, obnovy po výpadku spojení a zálohovacích scénářů.

01 Co je robocopy

Robocopy je nástroj příkazové řádky vestavěný ve Windows (od Windows Vista / Server 2008 součást systému, dříve součást Resource Kitu). Na rozdíl od klasického copy nebo xcopy je navržen pro robustní přenosy velkých objemů dat — umí automaticky obnovit přerušené kopírování, přeskočit již přenesené soubory, zrcadlit celé stromy adresářů a zachovat atributy, časová razítka i oprávnění NTFS.

Používá se typicky pro zálohování, migraci dat na nový server, synchronizaci sdílených složek přes síť a jako motor v naplánovaných úlohách (Task Scheduler).

i Robocopy se chová jinak než běžné kopírovací nástroje — bez správných přepínačů může např. smazat soubory v cíli (přepínač /MIR). Vždy si nejdřív ověřte chování pomocí /L (zkušební běh bez zápisu).

02 Základní syntaxe

syntaxe
robocopy zdroj cíl [soubory] [přepínače]
PrvekPopis
zdrojCesta ke zdrojové složce (lokální, UNC síťová cesta, nebo mapovaný disk).
cílCesta k cílové složce. Robocopy vždy pracuje se složkami, ne s jednotlivými soubory jako cílem.
souboryVolitelná maska souborů, např. *.docx. Výchozí je *.* (vše).
přepínačeVolby ovlivňující rozsah, chování při chybách, filtrování a logování.
! Cesty obsahující mezery musí být v uvozovkách a nesmí končit zpětným lomítkem před uzavírací uvozovkou ("C:\Data\" se interpretuje špatně) — použijte "C:\Data" nebo zdvojte lomítko "C:\Data\\".

03 Rychlý start

Zkopírovat obsah složky (bez podsložek)

cmd
robocopy "C:\Zdroj" "D:\Cil"

Zkopírovat včetně všech podsložek (i prázdných)

cmd
robocopy "C:\Zdroj" "D:\Cil" /E

Zrcadlení — cíl bude přesně odpovídat zdroji

cmd
robocopy "C:\Zdroj" "D:\Cil" /MIR
! /MIR maže v cíli vše, co ve zdroji chybí. Otestujte nejdřív s /L — viz kapitola Recepty.

04 Rozsah kopírování

/S
Zkopíruje podsložky, ale vynechá prázdné podsložky.
/E
Zkopíruje podsložky včetně prázdných.
/MIR
Zrcadlení stromu adresářů — ekvivalent /E + /PURGE. Maže v cíli soubory a složky, které již nejsou ve zdroji.
/MIR
Ekvivalent /E /PURGE dohromady.
/PURGE
Smaže soubory a složky v cíli, které v aktuálním zdrojovém stromu neexistují (bez zrcadlení podsložek navíc).
/LEV:n
Omezí kopírování na n úrovní hloubky adresářového stromu.
/CREATE
Vytvoří pouze strukturu adresářů a soubory s nulovou délkou (bez skutečného obsahu).
! /MIR s omylem prohozeným zdrojem a cílem dokáže nenávratně smazat obsah celé sdílené složky. Před ostrým použitím vždy proveďte zkušební běh s /L.

05 Atributy a metadata

Robocopy standardně kopíruje data, atributy a časová razítka souborů (/COPY:DAT je výchozí). Rozsah lze upravit:

/COPY:flagy
Co kopírovat: Data, Atributy, Timestampy, S zabezpečení (NTFS ACL), O vlastník, U auditní informace. Výchozí DAT.
/DCOPY:flagy
Co kopírovat u adresářů: Data, Atributy, Timestampy. Výchozí DA. /DCOPY:T je potřeba pro zachování data vytvoření/změny složky.
/SEC
Zkrácený zápis pro /COPY:DATS — zachová i zabezpečení NTFS.
/COPYALL
Zkrácený zápis pro /COPY:DATSOU — vše včetně vlastníka a auditu.
/NOCOPY
Nekopíruje žádné atributy — užitečné v kombinaci s /PURGE pro pouhé čištění cíle.
/A+:RASH
Po zkopírování přidá zadané atributy (Read-only, Archive, System, Hidden).
/A-:RASH
Po zkopírování odebere zadané atributy.
/DST
Kompenzuje rozdíly v čase daném letním/zimním časem při porovnávání časových razítek.

06 Výkon a vícevláknové kopírování

/MT[:n]
Kopíruje více souborů souběžně ve n vláknech (výchozí 8, rozsah 1–128). Výrazně zrychluje přenos mnoha malých souborů. Automaticky zapíná /NP (nezobrazuje procenta u jednotlivých souborů).
/J
Nevyrovnávané (unbuffered) I/O — vhodné pro kopírování velmi velkých souborů, šetří paměť.
/IPG:n
Vloží mezi pakety pauzu n milisekund — omezí zátěž pomalé nebo přetížené sítě.
cmd — kopírování s 16 vlákny
robocopy "\\Server\Sdilena" "D:\Zaloha" /E /MT:16
i /MT pomáhá hlavně u velkého počtu malých souborů. U několika málo velkých souborů efekt nemusí být znatelný a vyšší zátěž disku/sítě může naopak výkon zhoršit.

07 Opakování a čekání

Výchozí chování robocopy při chybě přístupu k souboru je 1 milion pokusů s prodlevou 30 sekund — na nespolehlivé síti to prakticky zamrzne úlohu na dny. Vždy nastavujte vlastní hodnoty.

/R:n
Počet opakování při selhání kopírování souboru. Rozumná hodnota pro skripty: /R:3 až /R:5.
/W:n
Čekací doba mezi pokusy v sekundách. Časté nastavení: /W:5 až /W:10.
/REG
Uloží aktuální nastavení /R a /W do registru jako výchozí pro budoucí spuštění.
/TBD
Počká, pokud sdílené názvy nejsou ihned dostupné (zotavuje se z dočasné chyby sdílení).
cmd — doporučené nastavení pro skripty
robocopy zdroj cíl /E /R:3 /W:5

08 Výběr a vyloučení souborů

/XF soubor…
Vyloučí soubory podle jména nebo masky, např. /XF *.tmp *.log.
/XD složka…
Vyloučí celé adresáře podle jména nebo cesty, např. /XD "Temp" "node_modules".
/XA:flagy
Vyloučí soubory s danými atributy (H skryté, S systémové, R jen pro čtení…).
/XC
Vyloučí soubory, které se změnily (changed).
/XN
Vyloučí novější soubory (newer) než v cíli.
/XO
Vyloučí starší soubory (older) než v cíli.
/XX
Vyloučí soubory a složky, které existují navíc v cíli (nesmaže je).
/XL
Vyloučí soubory a složky, které existují pouze ve zdroji (lonely) — nekopíruje nové položky.
/IS
Zahrne stejné (identical) soubory do kopírování — jinak se přeskakují.
/IT
Zahrne rozdílné časy i velikost (tweaked) do porovnání.
cmd — záloha bez dočasných a cache souborů
robocopy "C:\Projekty" "E:\Zaloha\Projekty" /MIR
  /XD "node_modules" ".git" "__pycache__"
  /XF *.tmp Thumbs.db desktop.ini

09 Časové a velikostní filtry

/MAXAGE:n
Kopíruje pouze soubory starší nejvýše n dní (nebo datum ve formátu RRRRMMDD).
/MINAGE:n
Kopíruje pouze soubory staré alespoň n dní.
/MAXLAD:n
Vynechá soubory, k nimž nebylo přistupováno déle než n dní (max. last access date).
/MINLAD:n
Vynechá soubory, k nimž bylo přistupováno v posledních n dnech.
/MAX:n
Vynechá soubory větší než n bajtů.
/MIN:n
Vynechá soubory menší než n bajtů.
cmd — jen soubory změněné za poslední týden
robocopy "C:\Data" "D:\Prirustkova" /E /MAXAGE:7

10 Logování a výstup

/LOG:soubor
Zapíše výstup do souboru (přepíše existující).
/LOG+:soubor
Připojí výstup na konec existujícího log souboru.
/TEE
Zobrazí výstup v konzoli a zároveň jej zapíše do logu (jinak /LOG konzoli potlačí).
/NP
Nezobrazuje procentuální průběh kopírování jednotlivých souborů — kratší, čitelnější log.
/NFL
Nevypisuje jména jednotlivých souborů (no file list) — vhodné pro rychlý přehled u obřích stromů.
/NDL
Nevypisuje jména adresářů (no directory list).
/NJH
Vynechá hlavičku úlohy (no job header) v logu.
/NJS
Vynechá souhrn úlohy (no job summary) na konci logu.
/V
Podrobný (verbose) výstup — zahrne i přeskočené soubory.
/ETA
Zobrazí odhadovaný čas dokončení pro každý soubor.
/L
Zkušební běh (list only) — nic nekopíruje ani nemaže, jen vypíše, co by se stalo. Klíčové pro ověření /MIR a /PURGE před ostrým spuštěním.
cmd — přehledný log do souboru
robocopy zdroj cíl /MIR /R:3 /W:5
  /LOG:"C:\Logy\zaloha.log" /NP /NDL :: přehledný souhrnný log

12 Praktické recepty

Zkušební běh před ostrým zrcadlením

cmd
robocopy "C:\Zdroj" "D:\Cil" /MIR /L /NP :: jen nasimuluje, nic nezmění

Plnohodnotná záloha s logem a odolností proti výpadku sítě

cmd
robocopy "\\Server\Data" "E:\Zalohy\Data" /MIR
  /R:3 /W:10 /MT:8
  /LOG+:"C:\Logy\zaloha_%date:~-4,4%%date:~-7,2%%date:~-10,2%.log"
  /NP /TEE

Synchronizace bez mazání (jen přidávat, nikdy neubírat)

cmd
robocopy "C:\Zdroj" "D:\Cil" /E :: bez /PURGE nic nemaže

Přesun souborů (kopie + smazání zdroje po úspěchu)

cmd
robocopy "C:\Docasne" "D:\Archiv" /MOVE /E :: /MOVE = /MOV + smazání prázdných složek ve zdroji

Dávkový skript s kontrolou návratového kódu

zaloha.bat
@echo off
robocopy "C:\Data" "E:\Zaloha" /MIR /R:3 /W:5 /NP /LOG:zaloha.log

if %ERRORLEVEL% GEQ 8 (
    echo Zaloha selhala, kod: %ERRORLEVEL%
    exit /b 1
) else (
    echo Zaloha probehla v poradku, kod: %ERRORLEVEL%
    exit /b 0
)

Naplánování přes Task Scheduler (schtasks)

cmd — denní úloha ve 2:00
schtasks /create /tn "NocniZaloha" /tr "C:\Skripty\zaloha.bat" /sc daily /st 02:00

13 Časté chyby a tipy

Cesta v uvozovkách končící lomítkem

"D:\Cil\" na konci příkazu Windows interpretuje uvozovku jako escapovaný znak a spojí ji s dalším argumentem. Řešení: nepoužívat koncové lomítko, nebo jej zdvojit.

Výchozí opakování 1 milion pokusů

Bez /R a /W se robocopy při nedostupném souboru (např. zamčeném antivirem) pokouší milionkrát po 30 vteřinách — úloha může vypadat jako zaseknutá celé dny. Vždy explicitně nastavte /R:3 /W:5 nebo podobně.

Délka cesty nad 260 znaků

Robocopy standardně zvládá i delší cesty než klasický Windows Explorer díky interní podpoře prefixu \\?\. Pokud přesto narazíte na chybu, zkuste zkrátit hloubku struktury nebo použít mapovaný disk blíž ke zdrojové složce.

/MIR a atribut skryté/systémové soubory

Ve výchozím nastavení robocopy kopíruje i skryté a systémové soubory. Pokud narazíte na neočekávané mazání souborů jako desktop.ini, přidejte je do /XF.

Rozdíl mezi /MOV a /MOVE

PřepínačChování
/MOVPřesune soubory, ale zdrojové složky ponechá (i prázdné).
/MOVEPřesune soubory i složky — zdroj po dokončení zůstane prázdný.

Kontrola verze

cmd
robocopy /? :: vestavěná nápověda přímo v systému