Robocopy je jedním z nejpoužívanějších nástrojů příkazového řádku pro kopírování velkých objemů dat v systému Windows. Je to tak populární nástroj, protože jak silný je. Ale se vší silou přichází složitost. V této příručce rozebereme veškerou složitost a poskytneme kompletní návod k použití tohoto užitečného nástroje.
Robocopy je nástroj příkazového řádku systému Windows, který je k dispozici od Windows NT. Je to náhrada za méně univerzální nástroj xcopy. Umožňuje určit cestu jednotky nebo cestu serveru pro kopírování / přesun souborů na příkazovém řádku.
verze Robocopy od tohoto psaní je až 10.0.18. Toto je verze, na které jsem provedl testování.
Robocopy poskytuje spoustu funkcí, které můžete využít k provádění efektivních a rychlých kopií a přesunů souborů. To může:
- kopírovat soubory přes síť s možností obnovení
- může přeskočit spojovací body NTFS způsobující selhání obvykle z nekonečných smyček
- může kopírovat atributy souborů a adresářů zachovávající časová razítka
- může kopírovat oprávnění NTFS, vlastníky a informace o auditu
- může kopírovat časová razítka adresáře
- může kopírovat soubory v režimu „zálohování“, aby se zajistilo kopírování souborů i tato práva byla administrátorovi odepřena
- automatické opakování
- může synchronizovat dvě složky
- je dostatečně chytrý, aby přeskočil soubory již Zkopírované
- může kopírovat cesty větší než limit 256 znaků
- provádět asynchronní kopie pomocí své schopnosti multithreading.
- vrací standardizované výstupní kódy pro použití ve skriptech
jak můžete vidět, je tu hodně kopírovat. Chtěl jsem pokrýt vše, co potřebujete vědět o tomto praktickém nástroji.
obsah
společný odkaz na syntaxi Robocopy
proč takový dlouhý blogový příspěvek na jediném nástroji? Jen si dejte pozor na níže uvedené tabulky. Máte spoustu možností kopírovat nebo přesouvat soubory s robocopy! Budete více možností v jednotlivých sekcích.
tyto tabulky byly vytvořeny ze syntaxe nápovědy vrácené z robocopy /?
. Byly rozděleny do smysluplnějších sekcí, přidány v průběhu času a vyčištěny, aby poskytly užitečnější informace.
možnosti zdroje
přepínač | vysvětlení | výchozí chování | ekvivalentní přepínač | poznámky |
/s | kopírovat podsložky | |||
/E | kopírovat podsložky včetně prázdných podsložek | |||
/COPY: | Možnosti kopírování | / COPY: DAT | D=Data,a = atributy, T=časová razítka S=Security=NTFS ACLs, O=informace o vlastníkovi, U=informace o auditu. Data souboru (D) vždy obsahují časová razítka souboru (T) | |
/SEC | kopírování souborů s bezpečností | /kopie: DATS | ||
/DCOPY: t | kopírovat časová razítka adresáře | |||
/COPYALL | kopírovat všechny informace o souboru | /kopie: DATSOU | tím se zabrání dehydrataci souborů offline a místo toho se zkopíruje značka souboru (alespoň v systémech emc VNX/Unity). To není oficiálně zdokumentováno! Pokud dehydratace je to, co potřebujete (důvod, proč jsem našel tento problém), nemůžete kopírovat ACL podél souborů. Kredit: Monsieurx (Reddit) | |
/NOCOPY | kopírovat žádné informace o souboru | užitečné s / očistit | ||
/a | kopírovat pouze soubory se sadou atributů archiv | |||
/M | like / a, ale odstranit atribut archivu ze zdrojových souborů | |||
/LEV:n | zkopírujte pouze horní N úrovně zdrojového stromu | |||
/MAXAGE: n | maximální věk souboru-vyloučit soubory starší než n dny / Datum | |||
/MINAGE: n | minimální věk souboru-vyloučit soubory novější než n dny / Datum | pokud n < 1900 pak n = počet dní, jinak n = RRRRMMDD Datum | ||
/FFT | Předpokládejme časy souborů FAT | 2-druhé datum / čas zrnitost. Tím se nahradí časová razítka NTFS. Zdá se, že je spolehlivější při přenosu přes síť. | ||
/256 | vypněte velmi dlouhou cestu (> 256 znaků) podpora |
Možnosti cíle
přepínač | vysvětlení | výchozí chování | ekvivalentní přepínač | poznámky |
/A+: | nastavení atributů souborů v cílových souborech + přidat | |||
/v-: | Odebrat atributy souborů v cílových souborech | |||
/FAT | Vytvořte cílové soubory pomocí 8.3 pouze názvy souborů FAT | |||
/vytvořit | vytvořit adresářovou stromovou strukturu + pouze soubory s nulovou délkou | |||
/DST | kompenzujte hodinové DST časové rozdíly |
Možnosti kopírování
přepínač | vysvětlení | výchozí chování | ekvivalentní přepínač | poznámky |
/L | seznam souborů pouze | nekopírujte, časové razítko ani neodstraňujte žádné soubory | ||
/MOV | přesunout soubory | odstranit ze zdroje po kopírování | ||
/přesunout | přesunout soubory a adresáře | odstranit ze zdroje po kopírování | ||
/sl | zkopírujte symbolické odkazy souboru místo cíle | |||
/z | kopírování souborů v restartovatelném režimu | přežít síť závada | ||
/B | kopírování souborů v režimu zálohování | |||
/J | kopírovat pomocí unbuffered I / O | doporučeno pro velké soubory | ||
/Nooffload | kopírování souborů bez použití mechanismu stahování kopií systému Windows | https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831628(v=ws.11) | ||
/EFSRAW | zkopírujte všechny šifrované soubory pomocí režimu EFS RAW | |||
/TIMFIX | opravte časy souborů na všech souborech, dokonce i přeskočené soubory | |||
/XO | vyloučit starší | pokud cílový soubor existuje a má stejné datum nebo novější než zdroj-neobtěžujte se jej přepsat. | ||
/XC | vyloučit změněné soubory | |||
/XN | vyloučit novější soubory | |||
/XX | vyloučit soubory přítomné v cíli, ale ne zdroj | / XX | ||
/XF soubor … | vyloučit soubory odpovídající daným jménům / cestám/zástupným znakům | |||
/XD dirs … | vyloučit adresáře odpovídající daným jménům / cestám. | /XF a / XD lze použít v kombinaci např. c:\source d:\dest /XF *.doc *.xls /XD c:\unwanted /S | ||
/IA: | zahrnout soubory s některým z daných atributů | |||
/XA: | vyloučit soubory s některým z daných atributů | |||
/IM | přepsat upravené soubory. To zahrnuje stejné soubory s různými časy. | |||
/je | přepsat soubory, i když jsou již stejné | |||
/to | obsahovat vylepšené soubory | |||
/XJ | vyloučit spojovací body ze zdroje | / XJ | ||
/XJD | vyloučit spojovací body ze zdrojových adresářů | |||
/XJF | vyloučit spojovací body z zdrojové soubory | |||
/MAX: n | vyloučit soubory větší než n bajtů | |||
/MIN: n | vyloučit soubory menší než n bajtů | |||
/MAXLAD: n | vyloučit soubory nepoužívané od n | |||
/MINLAD:n | vyloučit soubory používané od n | pokud n < 1900 pak n = n dny, jinak n = RRRRMMDD Datum | ||
/MIR | zrcadlit Strom adresářů | /očista / E | ||
/vymazat | odstranit dest soubory/složky, které již ve zdroji neexistují | |||
/XL | vyloučit soubory přítomné ve zdroji, ale nikoli v cíli | |||
/SECFIX | Robocopy / secfix opravuje soubor zabezpečení všech souborů, dokonce i přeskočených souborů. | zadejte typ bezpečnostních informací, které chcete zkopírovat, také pomocí jedné z těchto možností: / COPYALL / COPY: O / COPY: S / COPY: U / SEC | ||
/ZB | použijte režim restartu; pokud je Přístup odepřen, použijte režim zálohování |
možnosti monitorování
přepínač | vysvětlení | výchozí chování | ekvivalentní přepínač | poznámky |
/v:n | počet opakování na neúspěšných kopiích | / R:1000000 | vždy se pokuste tuto možnost nastavit. Doporučuji nastavit to na 10-20, abyste neztráceli čas opakováním. | |
/W: n | čekací doba mezi pokusy | / W:30 | vždy se pokuste nastavit tuto možnost na nižší číslo, abyste to zkusili rychleji. Navrhuji 5-10. | |
/REG | Uložit /R: n A / W: n v registru systému Windows jako výchozí nastavení | |||
/RH:hhmm-hhmm | časy, kdy lze spustit nové kopie | |||
/TBD | počkejte na definování sdílených jmen | opakovat chybu 67 | ||
/PF | Zkontrolujte provozní hodiny podle souboru (nikoli podle průchodu) | |||
/po: n | spustit znovu, když je vidět více než n změn | |||
/MOT:m | spusťte znovu v m minutách, pokud se změní |
pochopení chování Robocopy
nyní jsem úplně vyhodil vaši mysl se všemi možnými možnostmi syntaxe, které máte k dispozici. Podívejme se nyní na všechny různé kombinace toho, jak můžeme použít tuto syntaxi.
mohl bych vám poskytnout nesmírně dlouhý seznam příkazů robocopy se stále rostoucím počtem přepínačů. Ale myslím, že je lepší tě naučit rybařit. Pojďme si projít, jak dát smysl ze všech těchto možností.
Robocopy pouze kopíruje celé adresáře
každé provedení robocopy bude mít zdrojový a cílový adresář. Robocopy kopíruje a přesouvá soubory podle celého adresáře. Není možné explicitně zkopírovat jeden soubor s robocopy. K tomu použijte copy
nebo PowerShell Copy-Item
.
můžete však robocopy jeden soubor se správným filtrováním, o kterém se dozvíte níže. Chcete-li robocopy jeden soubor souboru, zadejte zdrojové a cílové adresáře bezprostředně následované názvem souboru ve zdroji.
> robocopy c:\src d:\dst copythisfile.txt
syntaxe závisí na prostředí
také možnosti, které robocopy poskytnete, budou záviset na prostředí. Při pokusu zjistit, které možnosti použít, budete muset odpovědět na několik otázek.
- budete vždy kopírovat do prázdného adresáře?
- je možné, že soubory již existují v cílovém adresáři?
- budete kopírovat terabajty dat nebo jen několik megabajtů?
- budete kopírovat soubory přes síť nebo lokálně?
- … a další.
pokud v adresáři cílových souborů nejsou žádné soubory, neměli byste se starat o možnosti, které přepisují soubory. Pokud nebudete kopírovat soubory v síti, nedělejte si starosti s těmito možnostmi. Explicitně definujte své současné a potenciální budoucí okolnosti, ve kterých bude vaše prostředí.
rozpoznat výchozí volby
Robocopy používá ve výchozím nastavení mnoho možností. Můžete si je vybrat při pohledu na výše uvedené tabulky. Poskytuje také praktický výstup při každém spuštění nástroje.
níže vidíte, že když jsem spustil robocopy s nejzákladnějšími možnostmi (zdrojová a cílová složka), automaticky použil některé možnosti. Pochopení výchozího chování je důležité.
odkazujte na možnosti, které vidíte na výstupu, s výše uvedenými vysvětleními možností a přesně pochopíte, co robocopy dělá pod kryty.
pochopení toho, co Robocopy příkazy mohou dělat
pokud jste použili copy
nebo PowerShell je Copy-Item
rutiny, pravděpodobně jste zadali zdroj a cíl a pokračoval o svůj den. Není tam mnoho možností, které můžete nakonfigurovat. Tyto příkazy robocopy mají výchozí chování.
ale robocopy, na druhé straně, chápe mnohem více a dává vám flexibilitu vyladit chování tolik, kolik chcete.
je důležité vědět, že robocopy si není vědom pouze konceptu souboru nebo adresáře. Souborový systém má mnohem víc a robocopy podporuje téměř všechno.
soubor sedící na souborovém systému není jen hloupý objekt s jediným účelem. Existuje mnoho různých atributů a věcí, které jdou s konceptem souboru. Například soubor má atributy jako:
- časové razítko (zapsané, upravené a přístupné)
- NTFS ACL
- vlastník
- informace o auditu NTFS
- skrytý příznak
- archivovaný příznak
když zkopírujete nebo přesunete soubor, máte možnost přinést všechny tyto věci spolu s ním, pokud chcete.
pochopte, že když spustíte robocopy, nekopírujete pouze soubor, ale také potenciálně kopírujete všechny ostatní informace s ním. Je důležité si to uvědomit a zohlednit to v možnostech, které poskytujete robocopy.
Základy: Provedení scénářů WhatIf
pokud máte někde obrovský souborový server, který chcete migrovat a nechcete ještě podniknout žádné kroky, můžete pomocí robocopy vrátit to, co by udělal.
pomocí volby /L
můžete říct robocopy, aby vyjmenoval všechny soubory a/nebo složky, které zadáte, a vrátil seznam souborů, které by zkopíroval / přesunul.
volbu /L
můžete použít s jakoukoli jinou možností. To je skvělý způsob, jak vrátit všechny možnosti, které by robocopy použil (výchozí nebo ne). To vám poskytne celkový pohled na to, co robocopy udělá vzhledem k možnostem, které jste mu poskytli.
základy: kopírování souborů
nejzákladnějším použitím robocopy je použití zdrojového a cílového adresáře bez možností.
> robocopy C:\src C:\dst
tato volba zkopíruje všechny soubory (kromě podsložek) z C:\src k C:\dst.
můžete také zkopírovat vše, včetně podsložek (prázdné nebo ne) a oprávnění NTFS. To je, z toho, co mohu říct, metoda doslova zkopírovat vše, co je o adresáři souborů do jiného adresáře.
níže kopíruji všechny ACL NTFS, vlastníky souborů, podsložky (včetně prázdných) a všechny atributy souborů. To vše je možné pouze pomocí možnosti /E
zahrnout všechny prázdné podsložky a /COPYALL
zachytit zbytek.
> robocopy C:\src C:\dst /E /COPYALL
základy: přesouvání souborů
přesouvání souborů přenáší soubory z jednoho adresáře do druhého, stejně jako kopírování. Jediným rozdílem s operací přesunu je to, že zdrojové soubory jsou po kopii odstraněny.
Chcete-li odstranit soubory/adresáře ze zdroje po kopírování, použijte volbu /MOV
. Tím se odstraní všechny soubory v zadaném adresáři (žádné podsložky).
> robocopy C:\src C:\dst /MOV
můžete také použít /MOVE
přesunout všechny soubory a podsložky.
> robocopy C:\src C:\dst /MOVE
základy: synchronizace souborů
Robocopy umožňuje synchronizovat dva adresáře. To znamená buď zajistit, aby všechny soubory v cílovém adresáři byly ve zdrojovém adresáři a ne více. /MIR
replikuje data kopírující všechny soubory ve zdroji, které nejsou v cíli, a odstraní soubory v cíli, které nejsou ve zdroji. Pozor!
> robocopy C:\src C:\dst /MIR
kopírování souborů v síti
pokud kopírujete soubory v síti, měli byste zvážit několik možností.
Robocopy umožňuje kopírovat soubory v „restartovatelném režimu“ pomocí volby /Z
. To znamená, že pokud soubor začne kopírovat a selže uprostřed, kopie může začít znovu místo úplného selhání. Volba /Z
je užitečná, když se stream přeruší přes síť.
varování: někteří hlásili použití
/Z
snižuje výkon o 1/4. Dejte mi vědět vaše zjištění.
můžete také použít volbu /FFT
. Je známo, že tento přepínač přesněji zachovává časová razítka souborů při přenosu přes síť. Tato volba používá časová razítka systému souborů FAT namísto NTFS.
robocopy C:\src \SRV1\share /Z /FFT
použití /IPG pro řízení mezery mezi pakety
při kopírování souborů přes síť můžete použít přepínač /IPG
. Toto je také známé jako možnost mezery mezi pakety. Tato volba definuje (v milisekundách) frekvenci, ve které bude robocopy čekat mezi odesláním nových paketů.
vždy používejte cesty UNC, které nejsou písmena jednotky
čtenář na Redditu objevil tvrdý způsob, jak nepoužívat mapované jednotky jako cílový adresář. Místo toho vždy použijte vždy použijte cestu UNC. Pokud tak učiníte, můžete narazit na problémy s limitem 256 znaků. Podívejte se na tento dokument společnosti Microsoft pro více informací.
Robocopy Backup Mode (Robocopy /z)
Robocopy má možnost (/B
) nebo jako zálohu do restartovatelného režimu (/ZB
), která kopíruje soubory v režimu zálohování. Co je vlastně „režim zálohování“?
když obvykle zkopírujete soubor v systému Windows a stisknete soubor, který vyžaduje oprávnění správce pro přístup, zobrazí se chyba označující, že nemáte oprávnění. I když můžete být spuštěni jako místní správce, systém Windows vám k němu nedovolí přístup.
varování: při kopírování dat na server Windows Server 2016 se zapnutou de-duplikací byly hlášeny poškozené svazky serveru. Když použijete přepínač
/ZB
, výsledkem bude dedup chunk store, který je zničen v informacích o svazku systému. Zkopírované soubory nebudou čitelné a při pokusu o manipulaci s nimi budou generovat chyby. Serverfault odkaz s více informacemi.
režim zálohování je způsob, jak přistupovat k souborům bez obav o oprávnění.
Robocopy používá režim zálohování k použití SeBackupPrivilege pro čtení souborů a práva uživatele SeRestorePrivilege pro přístup ke všem souborům, které potřebuje. To ignoruje všechna esa, která by vám normálně bránila v přístupu k těmto souborům.
uživatelská práva SeBackupPrivilege a SeRestorePrivilege jsou obvykle přiřazena uživatelům ve skupinách operátorů zálohování a správců, ale někdy mohou být odstraněna. Zálohovací modul toto riziko eliminuje a dočasně uděluje uživateli provádějícímu robocopy tato práva.
pokud chcete zkontrolovat, zda má váš uživatelský účet toto právo, můžete spustit whoami /priv
a měla by se zobrazit obě práva.
filtrování souborů a složek
velká většina dostupných možností je vyloučit soubory a adresáře mnoha různými způsoby. Rozdělil jsem všechny způsoby, jak můžete filtrovat nebo vyloučit soubory a adresáře na základě různých kritérií.
podle názvu souboru nebo přípony souboru
filtrování souborů, které se zkopírují / přesunou v volání robocopy, se provádí pomocí zástupných znaků. Zástupný znak můžete použít k filtrování souborů odpovídajících konkrétnímu řetězci nebo příponě názvu souboru.
Chcete-li například kopírovat pouze soubory TXT, můžete zadat *.txt.
> robocopy C:\src C:\dst *.txt
pokud chcete omezit pouze soubory začínající na a, můžete použít*.
> robocopy C:\src C:\dst a*
Y0u může také poskytnout více sad shody názvů souborů tím, že je oddělí mezerou, jak je uvedeno níže.
> robocopy C:\src C:\dst a* b*
když filtrujete podle názvu souboru, robocopy vám ukáže filtr ve výstupu.
podle názvu adresáře
Robocopy umožňuje filtrovat položky nejen podle souboru, ale také podle názvu adresáře. Pomocí robocopy /xd
můžete vyloučit určité adresáře odpovídající určitému názvu.
při kopírování více složek použijte přepínač /XD
k vyloučení složek ze běhu.
> robocopy C:\src C:\dst /XD "c:\src\exclude"
Podle souboru / adresáře Timestamp
níže najdete všechny možnosti robocopy, které vyloučí soubory a složky na základě různých atributů časového razítka.
přepínač | vysvětlení |
/DCOPY: t | kopírovat časová razítka adresáře |
/MAXAGE: n | vyloučit soubory starší než n dny / Datum |
/mináž:n | vyloučit soubory novější než n dny / Datum |
/XO | pokud cílový soubor existuje a má stejné datum nebo novější než zdroj, nepřepisujte |
/XN | pokud cílový soubor existuje a je stejný nebo starší než zdroj, nepřepisujte |
existují dvě oblíbené možnosti, které si můžete vybrat při filtrování věcí, jako je časové razítko; /XO
a /MAXAGE
.
/XO
umožňuje vyloučit soubory z kopie, pouze pokud jsou novější než zdroj. Pomocí volby /XO
můžete robocopy pouze nové soubory podle data přístupu.
> robocopy C:\src C:\dsc /XO
pokud víte, že maximální věkové soubory budou, můžete také použít volbu /MAXAGE
. To vám umožní určit ve formátu YYYMMDD starší datum, které může mít soubor před zkopírováním.
> robocopy c:\src c:\dst /S /MAXAGE:20191001
Robocopy Jobs
viděli jste, že máte k dispozici desítky možností. Je snadné, aby se tyto možnosti brzy staly těžkými. Naštěstí máte lepší možnost, než si zapamatovat a zajistit, aby všechny tyto možnosti byly pokaždé na místě.
Robocopy job files jsou textové soubory obsahující jednu možnost na řádek. K vytvoření těchto souborů úloh budete obvykle používat robocopy. Po vytvoření můžete použít robocopy k jejich úpravě nebo jednoduchý textový editor.
máte různé příkazy robocopy, které pracují s úlohami.
přepínač | vysvětlení | výchozí chování | ekvivalentní přepínač | poznámky |
/JOB: jobname | vezměte parametry z pojmenovaného souboru úlohy | |||
/uložit:jobname | Uložte parametry do pojmenovaného souboru úlohy | |||
/ukončit | ukončit po zpracování příkazového řádku | užitečné pro prohlížení parametrů | ||
/NOSD | není zadán žádný zdrojový adresář | |||
/NODD | není zadán cílový adresář | |||
/pokud | obsahují následující soubory |
typický soubor úloh vytvořený pomocí robocopy má příponu RCJ a vypadá jako níže uvedený úryvek. Tento soubor úloh byl vytvořen spuštěním robocopy C:\src D:\dst /save:myjob
. Můžete vidět, že můžete poskytnout komentáře v souboru úlohy pomocí ::
, což je většina toho, co tento soubor má.
bez komentářů by soubor obsahoval pouze jednu možnost na řádek.
:::: Robocopy Job C:\MYJOB.RCJ:::: Created by Administrator on Sunday, August 18, XXXX at 8:53:24 AM:::::: Source Directory ::: /SD:C:\SRC\ :: Source Directory.:::: Destination Directory ::: /DD:C:\SRC\ :: Destination Directory.:::: Include These Files ::: /IF :: Include Files matching these names:: *.* :: Include all names (currently - Command Line may override):::: Exclude These Directories ::: /XD :: eXclude Directories matching these names:: :: eXclude no names (currently - Command Line may override):::: Exclude These Files ::: /XF :: eXclude Files matching these names:: :: eXclude no names (currently - Command Line may override):::: Copy options ::: /DCOPY:DA :: what to COPY for directories (default is /DCOPY:DA). /COPY:DAT :: what to COPY for files (default is /COPY:DAT).:::: Retry Options ::: /R:1000000 :: number of Retries on failed copies: default 1 million. /W:30 :: Wait time between retries: default is 30 seconds.:::: Logging Options :::
uložení souborů úlohy
uložení souboru úlohy je stejně jednoduché jako přidání možnosti /SAVE:<jobname>
na konec syntaxe. Nahraďte <jobname>
názvem úlohy. Volba /SAVE
vytvoří soubor s názvem <jobname>.RCJ v adresáři, kde jste spustili robocopy.
> robocopy C:\src C:\dst /SAVE:myjob
jako poslední možnost musíte zadat /SAVE
. Všechny volby zadané po /SAVE
nebudou přidány do souboru úlohy. Všimněte si také, že i když již existující soubor úlohy existuje, robocopy vždy přepíše existující soubor. Zálohování nebo verze ovládat své pracovní soubory!
Poznámka: Pokud se pokusíte použít volbu
/MT
při ukládání do souboru úlohy, nebude v souboru úlohy. Dejte mi vědět, pokud se vám to podařilo zahrnout.
použití souborů úloh
jakmile je úloha uložena do souboru úlohy, můžete pomocí možnosti /JOB:<jobname>
určit soubor úlohy, ze kterého se má číst. Robocopy čte všechny parametry uvnitř souboru úlohy. Poté se spustí, jako byste zadali možnosti přímo na příkazovém řádku.
> robocopy /JOB:myjob
vytvoření souboru úlohy bez spuštění úlohy pomocí / QUIT
účel volby /QUIT
není zřejmý. Na povrchu si můžete myslet, že /QUIT
nutí Běh k odchodu. Místo toho /QUIT
funguje spíše jako možnost zabránit spuštění úlohy na prvním místě.
oficiálně volba /QUIT
„nutí robocopy ukončit zpracování příkazového řádku“. Bylo by však lépe vysvětleno jako vytvoření souboru úlohy bez spuštění úlohy.
pokud použijete volbu /SAVE
, spustí úlohu také automaticky. Neexistuje žádný způsob, jak vytvořit soubor úlohy bez předchozího spuštění úlohy. Můžete vytvořit soubor úlohy RCJ pomocí textového editoru nebo můžete použít robocopy to přidáním /QUIT
na konec.
> robocopy C:\src C:\dst /SAVE:myjob /QUIT
úprava souboru úlohy
vzhledem k tomu, že soubory úloh jsou pouze textové soubory, můžete je upravit pomocí svého oblíbeného textového editoru nebo můžete nechat robocopy udělat za vás.
soubory úloh můžete upravovat kombinací /JOB
, /SAVE
a /QUIT
.
možná byste například chtěli vyloučit všechny EXE soubory z úlohy robocopy uložené v souboru úlohy s názvem backupfiles.rcj. Soubor úlohy jste již vytvořili a nechcete celou věc přepsat. Můžete přidat novou možnost jako níže:
> robocopy /JOB:backupfiles /XF *.EXE /SAVE:backupfiles /QUIT
pomocí více souborů úloh
můžete dokonce kombinovat použití souborů úloh. Při zadávání více souborů úloh ve stejném běhu budou všechny možnosti použité v tomto běhu spojeny dohromady.
například možná máte velký seznam souborů, které chcete vyloučit ze úlohy kopírování backupfiles. Otevřete textový editor a přidejte následující pro vytvoření vyloučení.soubor rcj.
/XF a.exe b.txt c.cer
pak můžete tyto soubory vyloučit z úlohy backupfiles takto:
> robocopy /JOB:backupfiles /JOB:exclude
vzhledem k tomu, že původní soubor úlohy backupfiles již vylučoval všechny soubory EXE, syntaxe výše uvedeného běhu by vypadala jako /XF *.exe a.exe b.txt c.cer
. Robocopy kombinuje všechny možnosti do jednoho.
šablony Robocopy a pomocí možností /NOSD a / NODD
pokud pracujete s mnoha soubory úloh, můžete vytvářet soubory úloh, které přijímají parametry. Robocopy umožňuje předávat hodnoty z příkazového řádku do úloh, když jsou spuštěny. Parametr není termín robocopy, ale v tomto scénáři dobře zapadá.
úlohy robocopy můžete vytvořit tak, aby přijímaly parametry tím, že nezadáte zdrojový nebo cílový adresář explicitně pomocí možností /NOSD
a /NODD
nebo prostě nezahrnete zdrojový a cílový adresář vůbec.
pro jednoduchý příklad vytvořte soubor úlohy bez zdroje nebo cíle pomocí syntaxe níže. Záměrem této úlohy je zkopírovat všechny soubory TXT a EXE ze zdroje do cílového adresáře.
> robocopy *.txt *.exe /SAVE:backupfiles /QUIT
Tato úloha sama o sobě nikdy nebude fungovat, protože není zadán žádný zdrojový nebo cílový adresář.
když vytvoříte úlohu bez zdrojového a cílového adresáře, soubor úlohy se automaticky vytvoří pomocí možností /NOSD
a /NODD
.
/NOSD /NODD/IF *.txt *.exe/DCOPY:DA/COPY:DAT/R:1000000/W:30
volby /NOSD
řeknou robocopy, že jste nezahrnuli zdrojový adresář, zatímco /NODD
znamená, že jste nezahrnuli cílový adresář. Tento soubor úloh je „šablona“ pro jiné úlohy.
ale můžete předat „parametry“ do tohoto souboru úlohy a poskytnout zdrojové a cílové adresáře.
Chcete-li použít Soubor úlohy právě vytvořený pro kopírování souborů z C:\src do C:\dst, můžete předat tyto adresáře přímo na příkazovém řádku, který pak bude předán do úlohy.
> robocopy /JOB:backupfiles C:\src C:\dst
asynchronní kopírování (Robocopy / MT)
ve výchozím nastavení robocopy zpracovává pouze jeden soubor najednou. Můžete však donutit robocopy kopírovat více souborů než najednou pomocí volby /MT
.
volba /MT
umožňuje zadat počet vláken, které robocopy použije ke kopírování souborů. Maximum je 128.
můžete použít /MT
takto:
> robocopy C:\src C:\dst /MT:32
v tomto případě jsem vybral 32 jako základní linii. Navrhuji začít na 32, abyste viděli, jak váš počítač a síť zvládají věci a podle toho upravují vlákna.
Všimněte si, že pokud použijete
/MT
, nebudete moci použít/IPG
nebo/EFSRAW
. Pro lepší výkon nevydávejte protokol do konzoly. Místo toho použijte/LOG
.
plánování Robocopy
Robocopy má několik způsobů, jak můžete naplánovat, když běží.
pomocí /RH
pomocí volby /RH
můžete říct, že robocopy běží pouze během určitého času. To je skvělé, pokud máte okno údržby nebo čas, kdy všichni odešli domů na den.
můžete zadat počáteční a koncový čas ve formátu HHMM-HHMM. Chcete-li například vyvolat robocopy, ale povolit pouze běh mezi hodinami 5PM a 9AM, jak je definováno systémovými hodinami, spusťte:
> robocopy C:\src C:\dst /RH:1700-0900
uvidíte, že pokud vyvoláte robocopy mimo tyto hodiny, řekne vám aktuální čas a počká na spuštění.
musíte se ujistit, že oba časy jsou ve formátu 24 hodin a jsou přesně čtyři číslice dlouhé. Okno musí být větší než dvě minuty.
ve výchozím nastavení pomocí /RH
zkontroluje čas zahájení před celým spuštěním. Pokud však máte spoustu souborů a domníváte se, že proces může trvat déle, můžete použít možnost /PF
. /PF
donutí robocopy zkontrolovat okno před každým souborem.
pomocí Plánovače úloh
výstupní protokol
Robocopy vždy vrátí výstupní protokol. Zda je tento protokol zobrazen pomocí stdout na konzole a / nebo přesměrován do souboru protokolu, je jen na vás.
při zobrazení výstupu robocopy máte spoustu možností.
přepínač | vysvětlení | výchozí chování | ekvivalentní přepínač | poznámky |
/NP | žádný pokrok. Potlačuje zobrazení informací o pokroku. To může být užitečné, když je výstup přesměrován do souboru. | |||
/unicode | zobrazí stavový výstup jako text unicode | |||
/LOG: soubor | stav výstupu pro přihlášení souboru a přepsání | |||
/UNILOG: soubor | stav výstupu do souboru protokolu unicode a přepsání | |||
/LOG+:soubor | stav výstupu do souboru protokolu a připojení k existujícímu souboru protokolu | |||
/UNILOG+: soubor | stav výstupu do souboru protokolu unicode a připojení k existujícímu souboru protokolu | |||
/TS | zobrazuje časová razítka souboru pro každý zpracovaný soubor. | |||
/FP | nahrazuje jednoduché názvy souborů úplnými názvy cest k souborům ve výstupu. | |||
/NS | nezobrazuje Velikost souboru. | |||
/NC | skryje výstup třídy souborů „textové značky“ (více informací naleznete zde: https://www.uvm.edu/~gcd/2015/04/robocopy-file-classes/) | |||
/NFL | skryje názvy souborů. Poruchy jsou však stále zaznamenány. Všechny soubory soubory smazané nebo by byly smazány, pokud by byl / L vynechán, jsou vždy zaznamenány | |||
/NDL | skryje výstup výpisu adresáře. Úplné názvy cest k souborům jsou výstupem pro snadnější sledování problematických souborů. | |||
/TEE | výstup do okna konzoly, stejně jako soubor protokolu | |||
/NJH | žádná hlavička úlohy | |||
/NJS | žádné shrnutí úlohy | |||
/bajty | velikost tisku jako bajty | |||
/X | nahlásit všechny soubory, nejen ty vybrané & zkopírovány | |||
/V | produkovat podrobný výstupní protokol, zobrazující přeskočené soubory | |||
/ETA | Zobrazit odhadovaný čas příchodu zkopírovaných souborů. Podívejte se na čas zahájení každé kopie souboru a odhadovaný čas dokončení na základě pozorované propustnosti předchozích kopií. Časy se zobrazují za názvem souboru ve formátu HH: MM – > HH: MM (start – > dokončit). | |||
/ladění | zobrazit informace o svazku ladění |
omezení prvků protokolu pomocí /NJS a / NJH
ve výchozím nastavení robocopy vrací dva prvky ve svém výstupu, záhlaví úlohy a souhrn úlohy.
hlavička úlohy je jednoduchá hlavička ROBOCOPY nahoře.
shrnutí úlohy zobrazuje souhrnný stav všech souborů/složek, kolik dat bylo přeneseno a čas ukončení běhu.
můžete skrýt každý z těchto prvků pomocí /NJH
možnost skrýt záhlaví úlohy a /NJS
možnost skrýt souhrn úlohy. Můžete zahrnout jednu z těchto možností nebo obě dohromady.
přesměrování výstupního protokolu do souboru
pokud potřebujete uložit výstupní protokol, můžete jej přesměrovat do textového souboru a / nebo jej zobrazit na konzole. Můžete tak učinit pomocí tradičních výstupních přesměrovačů, jako je >
, >>
, PowerShell nebo volba /LOG
.
Chcete-li přesměrovat výstupní protokol do souboru pomocí možnosti /LOG
přepsat jakýkoli existující soubor protokolu, použijte syntaxi /LOG:<filepath>
jako níže. Jediným výstupem, který obdržíte na konzoli, je cesta k souboru protokolu.
> robocopy C:\src C:\dst /LOG:c:\file.log Log File : c:\file.log
pokud chcete zachovat obsah jakéhokoli existujícího souboru protokolu a přidat výsledky do souboru, můžete použít operátor +
, jak je uvedeno níže.
> robocopy C:\src C:\dst /LOG+:c:\file.log Log File : c:\file.log
přesměrování výstupního protokolu do souboru a zobrazení na konzole
pokud chcete uložit výstupní protokol do souboru, ale také jej vidět na konzole, můžete použít volbu /TEE
. Tato volba způsobí, že robocopy zapíše výstup do souboru protokolu při zachování výchozího chování návratu výstupu do konzoly.
robocopy C:\src C:\dst /LOG+:c:\file.log /TEE
výstupní kódy
stejně jako všechny ostatní nástroje příkazového řádku vrací robocopy výstupní kódy v závislosti na výsledcích provedení. Všichni si přejeme, aby robocopy vždy úspěšně ukončily 0
, ale to se vždy nestane.
níže naleznete všechny výstupní kódy, které robocopy vrací, a jejich vysvětlení. Jakýkoli výstupní kód větší než sedm označuje alespoň jedno selhání během provádění.
výstupní kód | vysvětlení |
0 | žádná akce provedena. Zdroj a cíl jsou synchronizovány. |
1 | alespoň jeden soubor byl úspěšně zkopírován. |
2 | byly zjištěny další soubory nebo adresáře. Zkontrolujte protokol. |
3 | výstupní kódy 2 a 1 dohromady. |
4 | byly nalezeny neodpovídající soubory nebo adresáře. Zkontrolujte protokol. |
5 | výstupní kódy 4 a 1 dohromady. |
6 | výstupní kódy 4 a 2 dohromady. |
7 | výstupní kódy 4, 1 a 2 dohromady. |
8 | alespoň jeden soubor nebo adresář nelze zkopírovat. Opakujte limit exceeeded. Zkontrolujte protokol. |
16 | kopie katastrofálně selhala. |
Všimněte si, že pokud provádíte robocopy v nástroji třetí strany, může si tento nástroj myslet, že jakýkoli nenulový výstupní kód je selhání. Chcete-li tomu zabránit, můžete změnit výstupní kód na 0, pokud vrátí 1.
výstupní kód souboru Robocopy „extra“ je běžný návratový kód, což znamená, že soubor“ extra “ je v cílové složce, ale ne ve zdrojové složce. Tento kód vylučuje doplňky, které zabrání vymazání z cíle.
Změna výstupního kódu v dávkovém souboru
pokud provádíte robocopy s dávkovým souborem, najdete hodnotu proměnné %ERRORLEVEL%
. Pokud vrátí 1, použijte klíčové slovo exit
pro ukončení skriptu s 0.
> (robocopy <options>) ^& IF %ERRORLEVEL% LEQ 1 exit 0
Změna výstupního kódu ve skriptu PowerShell
pokud provádíte robocopy ve skriptu PowerShell, můžete vyvolat robocopy s Start-Process
pomocí PassThru
vrátit vytvořený proces a Wait
počkat na dokončení robocopy. Potom můžete zkontrolovat vlastnost ExitCode
na hodnotu 1. Pokud je výstupní kód 1, Ukončete skript PowerShell pomocí 0 pomocí $host.SetShouldExit()
.
$exitCode = (Start-Process -FilePath 'robocopy' -ArgumentList '<option>' -PassThru -Wait).ExitCodeif ($exitCode -eq 1) { $host.SetShouldExit(0)}
běžné chyby
pokud máte co do činění s tisíci souborů, jste povinni narazit na některé problémy. Zde je rozpis běžných chyb, na které jsem narazil
chyba Neplatný parametr
když se zobrazí chyba s uvedením neplatného parametru chyba, obvykle to znamená, že jste se pokusili předat možnosti robocopy ze sekvence nějak. Zdá se, že chyba robocopy neplatný parametr 3 je nejčastější.
častým důvodem, proč byste tuto chybu obdrželi, je, když zadáte zdrojový nebo cílový adresář s mezerami a zapomenete jej obklopit uvozovkami.
příklady Robocopy
můžete si vytvořit vlastní řetězce robocopy nebo si můžete vzít to, co se ostatní naučili, a použít je! V této části se budu zabývat případy použití, jak používat robocopy k dosažení různých věcí.
Najděte velikost adresáře síťové složky
přispěvatel: northendtroooper (Reddit)
> robocopy "\MACHINE\fileshare" c:\dummy /l /xj /e /nfl /ndl /njh /r:0 /mt:64
rychle odstranit obsah složky (ignorování oprávnění na podsložky)
přispěvatel: pizzasteveo (Reddit)
> robocopy c:\dummy c:\foldertodelete /MIR
provádění velkých migrací souborů
přispěvatel: @MySnozzberries (Twitter)
cílem tohoto úryvku je vynutit vlastnictví všech souborů zpět správcům. Poté přidáme explicitní ACE pro skupinu administrátorů pro plnou kontrolu nad každým objektem rekurzivně, i když také nastavujeme dědičnost.
nakonec provedeme úplnou kopii robocopy s DACLs do cíle s logem. Log pak může být přezkoumána pro další problémy s oprávněním, nebo jen zámky souborů a další Delta sync lze provést později.
> takeown /F .\test /R /A /D Y> icacls .\test /grant "Administrators":(OI)(CI)F /T> robocopy .\test .\test2 /E /SEC /FP /V /LOG:.\temp.log
rekurzivně vynutit skupinu administrátorů jako vlastníka všech souborů a adresářů. Mohou existovat způsoby, jak to obejít, ale toto je nejtěžší přístup a obvykle nejrychlejší.
> takeown /F .\test /R /A /D Y
jakmile jsme vlastníkem, můžeme nyní vynutit nové eso do DACL pro každý objekt. To uděluje správcům plnou kontrolu s povolenou dědičností a rekurzivně cestou.
nastavení v kořenovém adresáři s dědičností by pokrývalo prostředí, ale pokud má sdílení vlastníka tvůrce s plnou kontrolou (což je bohužel i doporučení společnosti Microsoft pro věci, jako jsou obchody s uživatelskými profily souborů), může uživatel zakázat dědičnost nebo odstranit esa podle svého uvážení. Takže těžká ruka je obvykle nejrychlejší Oprava.
> icacls .\test /grant "Administrators":(OI)(CI)F /T
jakmile změníme Dacl na většině souborů, pokusíme se zkopírovat soubory na nové umístění, společné pro věci, jako je migrace sdílení souborů. Za tímto účelem kopírujeme položky rekurzivně a pomocí přepínače /SEC
také zkopírujeme Data / atributy/časová razítka / DACLs.
pak zaznamenáme operaci s plnými cestami a pro všechny objekty (/V
podrobný přepínač) do protokolu, takže můžeme odstranit <5% chyb, které se běžně týkají délky cesty nebo zámku souborů, a získat podrobnější informace.
> robocopy .\test .\test2 /E /SEC /FP /V /LOG:.\temp.log
Jedná se o jednoduchý rámec pro správu migrace sdílení souborů s minimálním dopadem na uživatelské prostředí. Zlepšuje také kontrolu, kterou drží nad daty. Pokud má zákazník silnou praxi správy dat, kde je vlastnictví řádně spravováno na úrovni podřízených složek, stává se to složitější diskusí, ale většina zákazníků, které najdeme, má štěstí, že používá pouze dědičnost a skupinová esa, takže se jedná o nejběžnější situaci a opravu, na které začínáme.
Robocopy alternativy
Robocopy je úžasný nástroj, ale existuje mnoho dalších podobných nástrojů, které by mohly být zajímavé.
- xxcopy-podobný nástroj příkazového řádku s množstvím možností.
- copy-Item PowerShell rutina – ne zdaleka tak vybavený, ale mnohem jednodušší.
- TreeSize-GUI a scriptable utility najít informace o složce.
shrnutí
Robocopy je vynikající nástroj pro kopírování velkých sad souborů. Ať už provádíte migraci dat, udržujete složky v synchronizaci nebo jednoduše potřebujete rychlý způsob, jak přesně kopírovat soubory, robocopy je skvělá volba.