A vy neznáte ROBOCOPY?

Velice často po mě moji známí či menší zákazníci požadují nějaké „udělátko“, pomocí kterého by mohli jednoduše zálohovat vybrané soubory a složky, a zároveň se nemuseli starat o aktualizace či verzování záloh. Prostě jen chtějí mít na nějakém externím disku či flashce zrcadlený obsah svých důležitých dat. A právě (a nejen) k tomuto účelu se ve světě Windows perfektně hodí příkaz ROBOCOPY.S trochou nadsázky se dá říci, že se jedná o rozšířenou verzi příkazů Windows shellu COPY, resp. XCOPY. ROBOCOPY však využívá mnoho speciálních parametrů, dokáže kopírovat nastavení zabezpečení, upravovat atributy souborů a spousty dalších užitečných vychytávek.

Jak plyne z výše uvedeného, budeme používat příkazovou řádku, ale nebojte se je to velice jednoduché. Pokud jste v tomto začátečníci, klikněte v nabídce Start na příkaz Spustit…, napište cmd a stiskněte Enter. Objeví se okno shellu. Můžete na zkoušku vepsat do příkazové řádky příkaz ROBOCOPY jen tak, bez parametrů – po odentrování se zobrazí stručná nápověda (kompletní podrobnou nápovědu zobrazíte příkazem ROBOCOPY /?).

použití ROBOCOPY v příkazové řádce

použití ROBOCOPY v příkazové řádce

Základní použití je ROBOCOPY zdroj cíl, tedy například ROBOCOPY „C:\Moje zdrojová složka“ „F:\Moje cílová složka. Pokud chcete dosáhnout efektu zrcadlení dat (tj. že na cílovém disku se po dokončení operace vždy objeví totožná data jako na zdrojovém, přidejte na konec příkazu parametr /MIR. Příkaz se pak postará o to, že porovná soubory v cíli se soubory zdrojovými, nakopíruje do cíle jen nové či změněné soubory, případně vymaže z cílového disku/složky ty soubory, které se již nenacházejí ve zdroji.

Uvedeme si zde příklad, jehož zadání zní:

Zkopíruj (vytvoř zrcadlo) domovskou složku (včetně všech, i prázdných podadresářů) uživatele Petr z disku C na flash disk F do složky Zaloha.

Řešení:

ROBOCOPY C:\Users\Petr F:\Zaloha /E /MIR /XJ /R:0

Parametry „/XJ“ a „/R:0“ nejsou nutné, nicméně doporučuji je (především ve Windows Vista a 7), protože vyloučí z kopírování spojovací body a zamezí mnohočetné opakování pokusu o kopírování souborů s chybou (v podstatě tak zabráníte možnému zacyklení příkazu a zároveň zvýšíte rychlost operace).

Ti zdatnější z Vás si pak mohou vytvořit vlastní script pro zálohování, jehož vzorek (který já sám hojně používám) si můžete stáhnout zde (zalohovani.zip). Nezapomeňte jej spouštět jako správce, jinak se může stát, že nedojde k úspěšnému zkopírování všech požadovaných souborů a složek.

ROBOCOPY ale není jen hračka pro domácí uživatele. Lze jej bezpečně použít i pro zálohování velkých objemů dat na zálohovací zařízení nebo do cloudu, především díky spoustě parametrů a možností, které přináší.

Kompletní syntaxi a dokumentaci příkazu najdete na Microsoftím TechNetu. Pro ty, kdo se bojí příkazové řádky a raději klikají, mohu vřele doporučit grafické klikátko Microsoft Robocopy GUI.

Na závěr ještě malé upozornění: Příkaz ROBOCPY je standardní součástí OS Windows Vista, 7, 8, 10, Windows Server 2008, 2012, 2016. V historických verzích, např. ve Windows XP nebo Windows Server 2003 jej standardně nenajdete, musíte si stáhnout z webu Microsoftu Windows Server 2003 Resource Kit Tools.

19 komentářů u „A vy neznáte ROBOCOPY?

  1. Marek Nehyba

    Dobrý den.
    Můžete mi prosím poradit, jak správně použít Robocopy? Potřebuji přesunout vše (i podsložky) ve složce cw , ale robocopy smaže i tu nadřazenou složku cw. Provedl jsem:
    robocopy F:\TMP\cw\ U:\Presun\Nehyba\cw_move\ /E /MOVE a výsledek byl ten, že ve zdroji zůstalo jen robocopy F:\TMP\ – přitom by mělo (nebo spíše potřebuji) zůstat robocopy F:\TMP\cw\
    Děkuji předem za radu

    1. admin Autor příspěvku

      Dobrý den,
      tohle je standardní vlastnost ROBOCOPY, resp. přepínače /MOVE. Kořenová složka, uvedená jako zdrojová, se vždy maže.
      Lze to ale poměrně elegantně obejít vytvořením fiktivního souboru v dané složce, ve vašem případě třeba „F:\TMP\cw\nemazat.txt“, který potom pomocí přepínače „/XF“ vyloučíte z přesunu. Tím pádem zůstane kořenová složka neprázdná a nedojde k jejímu smazání.

      Takže takto:
      robocopy F:\TMP\cw\ U:\Presun\Nehyba\cw_move\ /E /MOVE /XF nemazat.txt

  2. DUCH

    Dobrý den,
    jak zajistit aby robocopy soubory přesunoulo a přepsalo,
    mám složka A tam se objevý soubory robocopy je přesune do sloky B případně existující přepíše
    a složka A zůstane prázdná..

    1. admin Autor příspěvku

      Zdravím, například takto:
      robocopy C:\TEMP\A C:\TEMP\B *.* /E /MOVE

      Přesunutí zajišťuje parametr „/MOVE“ (přesouvají se soubory i podsložky), případně „/MOV“ (přesouvají se jen soubory).

  3. /LOG+:C:RCLOG.TXT

    zkouším příkaz robocopy a nedaří se mi aby vytvořil log soubor , něco píšu špatně, má být vytvořený adresář , nebo se může přímo do c:\ , nemáte někdo přesnou syntaxi jak má být napsané

    1. admin Autor příspěvku

      Dobrý den,

      správná a funkční syntaxe je např.:
      ROBOCOPY C:\TEMP C:\BACKUP a.jpg /LOG+:C:\TEMP\log.txt .
      Ale pozor, pokud nespouštíte příkaz se zvýšenými oprávněními (jako správce), pak to pravděpodobně nebude v případě /LOG+:C:\mujlog.txt fungovat, protože nebudete mít pod běžným uživatelským účtem oprávnění pro zápis.
      Pokud použijete např. jen /LOG+:mujlog.txt , pak se log uloží do domovského adresáře daného uživatele.

      JK

  4. František

    Dobrý den,

    Jak mohu pomocí robocopy zanechat duplicitní soubory na cilovém disku, když na tom cilovem disku udělám například změnu ve wordu a chci aby při přištím zrdcadlením tam zustala ta má změna plus ten starší soubor aby byli zachovány oba dva? snad mi rozumíte děkuji moc za odpověd

    1. admin Autor příspěvku

      Zdravím,

      obávám se, že tento konkrétní požadavek ROBOCOPY nevyřeší. Částečně se to dá řešit dvěma způsoby, ale nedosáhnete přesně toho co chcete:
      1) Pokud byste vynechal parametr „/MIR“ a dal tam jen „/E“, pak se z cílového disku nebude mazat to, co smažete ze zdroje, ale jinak to zůstane stejné – tzn. starší soubory v cílovém disku se vždy přepíší novějšími ze zdroje, soubory smazané ve zdroji na cílovém disku zůstanou.
      2) Pokud byste vynechal parametr „/MIR“ a přidal parametr „/XO“, pak dojde při kopírování k tomu, že když bude v cíli novější soubor, pak se ten starší ze zdroje nebude kopírovat. Veškeré úpravy v cílovém disku pak zůstanou zachované. Avšak ani toto neřeší to, co potřebujete.

      Je potřeba si uvědomit, že ROBOCOPY je pořád jen nástroj pro robustní kopírování/přesouvání dat, de facto je to jen vylepšený příkaz COPY. Na to, co Vy potřebujete, by se musel vytvořit nějaký powershellový script (nebo třeba něco v Pythonu), který bude při kopírování testovat, zda cílový soubor již existuje, a pokud ano, tak ho nepřepíše, původní soubor zanechá a nový zkopíruje např jako „copy_of_file.txt“ apod. Jen mi není jasné, jak by se to pak mělo chovat, když toto nastane znovu, případně když pak nastane situace, že je zdrojový soubor novější. Měly by se smazat/přepsat veškeré kopie v cíli?
      Asi bych tady zauvažoval o využití standardní služby Historie souborů (u Windows 10) nebo Stínové kopie svazku (na Windows serverech) – tam to sice funguje jinak, ale zálohy/kopie drží historii verzí souborů.

  5. Eliška

    Zdravím,
    jak udělat, aby mi ROBOCOPY přesunulo na externí disk jen věci, ve kterých se něco v PC změnilo?
    Příkaz „ROBOCOPY C:\Users\Owner\Documents F:\zaloha /E /MIR /XJ /R:0“ přesunuje, ale zároveň na externím disku smaže věci, který jsou na disku oproti PC navíc. Tj udělá, aby obsah disku byl totožný s PC. Chci, aby na disku bylo víc věcí než na PC a jen se tam zálohovaly další a další novinky…
    Díky, Eliška

    1. admin Autor příspěvku

      Dobrý den,

      stačí, když vynecháte parametr /MIR, který zajišťuje právě ono „mazání“ (ve skutečnosti zrcadlení) souborů (někdy se namísto /MIR používá také /E /PURGE), pak už to bude fungovat, jak potřebujete.

      Asi takto: ROBOCOPY C:\Users\Owner\Documents F:\zaloha /E /XJ /R:0

      JK

  6. Jakub

    Dobrý den, snažím se nastavit robocopy pro kopírování všech souborů ,které ve složce začínají písmenem „T“, ale stále se mi to nedaří žádným parametrem do stávajího příkazu nastavit. Máte s tím někdo zkušenost?

    robocopy.EXE E:\testFOLDER \\server\testFOLDER *.* *.* /S /E /MIR /Z /COPY:D /PURGE /ETA /LOG+:C:\administration\LOG.TXT

    Děkuji

    1. admin Autor příspěvku

      Zdravím,

      já bych to řešil takto:
      robocopy C:\TEMP\sourcefolder C:\TEMP\destfolder t*.*
      (mám to vyzkoušené, funguje)
      Jen nevím, zda jste neměl na mysli všechny soubory včetně těch v podsložkách, to robocopy nezajistí. Pak Ideálně PowerShell a syntaxe „forfiles“ apod.

      JK

    1. admin Autor příspěvku

      Máte samozřejmě pravdu, díky za upozornění. Sice současné použití parametrů /E a /MIR ničemu neublíží, ale je to zbytečné.
      Případně lze namísto /MIR použít kombinaci /E /PURGE – výsledek bude stejný.
      JK

  7. Jirka

    Zdravím.
    A jakým způsobem se dají pak z té zálohy, kterou vytvořím pomocí robocopy, obnovit data v případě havárie PC? Na tuto informaci jsem nikde nenarazil.
    Dík za info.

    1. admin Autor příspěvku

      Zdravím,
      obnovit data lze úplně stejně, jako vytvořit zálohu, tj. stačí např. v zálohovacím scriptu prohodit cesty (zdroj a cíl) a je to. Můžete ale samozřejmě obnovit data i pouhým zkopírováním dat ze záložního média/úložiště tam, kam je třeba. ROBOCOPY nezálohuje data žádným speciálním nebo proprietárním způsobem do jednoho souboru (jako to dělá např. zálohování Windows WBADMIN nebo speciální SW, např. Acronis Backup), pouze data kopíruje do určeného místa dle pravidel nastavených v parametrech příkazu.
      Ve většině případů používám ROBOCOPY jako jednoduchou a rychlou zálohu (nebo spíše kopii) dat. Rozhodně doporučuji toto kombinovat s tzv. „velkou“ neboli úplnou zálohou systému a dat pomocí k tomu určeného SW.
      JK

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *