Robocopy este una dintre cele mai utilizate utilitare de linie de comandă pentru a copia volume mari de date în Windows. Este un instrument atât de popular din cauza cât de puternic este. Dar cu toată această putere vine complexitatea. În acest ghid, vom descompune toată complexitatea și vom oferi un tutorial complet despre utilizarea acestui instrument util.
Robocopy este un utilitar de linie de comandă Windows care este disponibil de la Windows NT. Este un înlocuitor pentru utilitarul xcopy mai puțin versatil. Vă permite să specificați o cale de unitate sau o cale de server pentru a copia/muta fișiere la un prompt de comandă.
versiunea Robocopy începând cu această scriere este de până la 10.0.18. Aceasta este versiunea am efectuat testarea mea pe.
Robocopy oferă o mulțime de caracteristici pe care le puteți utiliza pentru a efectua copii și mișcări de fișiere eficiente și rapide. Se poate:
- copiați fișierele într-o rețea cu capabilități de reluare
- puteți sări peste punctele de joncțiune NTFS care cauzează eșecul de obicei din bucle infinite
- puteți copia atributele fișierului și directorului păstrând marcajele de timp
- puteți copia permisiunile NTFS, proprietarii și informațiile de audit
- puteți copia marcajele de timp ale directorului
- copiați fișierele în modul ‘backup’ pentru a vă asigura că fișierele sunt copiate chiar și acele drepturi au fost refuzate administratorului
- reîncercări automate
- poate sincroniza două foldere
- este suficient de inteligent pentru a sări peste fișierele deja copiate
- poate copia căi mai mari decât limita de cale de 256 de caractere
- efectua copii asincrone folosind capacitatea sa multithreading.
- returnează coduri de ieșire standardizate pentru utilizare în script-uri
după cum puteți vedea, există o mulțime de a copia. Am vrut să acopere tot ce trebuie să știți despre acest instrument la îndemână.
cuprins
comună Robocopy Sintaxa de referință
de ce un astfel de post pe blog lung pe un singur utilitar? Doar sărbătoare ochii pe mesele de mai jos. Aveți o mulțime de opțiuni pentru a copia sau muta fișiere cu robocopy! Veți mai multe opțiuni în secțiunile individuale.
aceste tabele au fost construite din sintaxa de ajutor returnată de la robocopy /?
. Au fost împărțite în secțiuni mai semnificative, adăugate în timp și curățate pentru a oferi informații mai utile.
Opțiuni sursă
comutator | explicație | comportament implicit | comutator echivalent | Note |
/S | copiază subfoldere | |||
/E | copiază subfoldere, inclusiv subfoldere goale | |||
/copiere: | Opțiuni Copiere | / copiere: DAT | D = date, a = atribute, T = marcaje de timp S = securitate = NTFS ACL – uri, o=Informații proprietar, U = informații de audit. Fișier de date (D) include întotdeauna file Timestamps (t) | |
/SEC | copiați fișierele cu securitate | /copie: DATS | ||
/DCOPY: T | marcajele de timp ale directorului de copiere | |||
/COPYALL | copiați toate informațiile despre fișier | /copiere: DATSOU | acest lucru va preveni deshidratarea fișierelor offline și va copia în schimb eticheta fișierului (cel puțin pe sistemele emc VNX/Unity). Acest lucru nu este documentat Oficial! Dacă deshidratarea este ceea ce aveți nevoie (motivul pentru care am găsit această problemă), nu puteți copia ACL-urile de-a lungul fișierelor. CREDIT: Monsieurx (Reddit) | |
/NOCOPY | copiați fără informații despre fișier | util cu / purjare | ||
/a | copiați numai fișierele cu setul de atribute de arhivă | |||
/m | like / A, dar eliminați atributul de arhivă din fișierele sursă | |||
/LEV:n | copiați numai nivelurile superioare n ale arborelui sursă | |||
/MAXAGE: n | vârsta maximă a fișierului-excludeți fișierele mai vechi de n zile/dată | |||
/MINAGE: n | vârsta minimă a fișierului-excludeți fișierele mai noi de n zile/dată | dacă n < 1900 atunci n = nu de zile, altfel n = data YYYYMMDD | ||
/FFT | presupune ori fișier FAT | 2-a doua dată/oră granularitate. Aceasta înlocuiește marcajele de timp NTFS. Pare a fi mai fiabil atunci când se transferă printr-o rețea. | ||
/256 | opriți calea foarte lungă (> 256 caractere) suport |
Opțiuni de destinație
comutator | explicație | comportament implicit | comutator echivalent | Note |
/A+: | setați atributul (atributele) fișierului pe fișierele destinație + adăugați | |||
/A-: | Remove fișier atribut(e) pe fișierele de destinație | |||
/FAT | creați fișiere de destinație folosind 8.3 nume de fișiere FAT numai | |||
/creați | creați structura arborescentă a directorului + numai fișiere cu lungime zero | |||
/DST | compensează diferențele de timp de o oră DST |
Opțiuni de copiere
comutator | explicație | comportament implicit | comutator echivalent | Note |
/L | numai fișiere listă | nu copiați, marca de timp și nu ștergeți niciun fișier | ||
/MOV | muta fișiere | ștergeți din sursă după copiere | ||
/mutare | Mutare fișiere și directoare | ștergeți din sursă după copiere | ||
/SL | copiați legăturile simbolice ale fișierului în locul țintei | |||
/Z | copiați fișierele în modul restartabil | supraviețuiește unei rețele glitch | ||
/B | copiați fișierele în modul de rezervă | |||
/J | Copiere folosind I/O netamponată | recomandat pentru fișiere mari | ||
/NOOFFLOAD | copiați fișiere fără a utiliza mecanismul de descărcare a copierii Windows | https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831628(v=ws.11) | ||
/EFSRAW | copiați orice fișiere criptate utilizând modul EFS RAW | |||
/TIMFIX | Fix ori fișier pe toate fișierele, chiar și fișiere omise | |||
/XO | Exclude mai vechi | dacă fișierul destinație există și este aceeași dată sau mai nou decât sursa – nu deranjez să-l suprascrie. | ||
/XC | Exclude fișierele modificate | |||
/Xn | excludeți fișierele mai noi | |||
/XX | excludeți fișierele prezente în destinație, dar nu și sursa | / XX | ||
/fișier XF … | excludeți fișierele care se potrivesc cu nume/căi / metacaractere | |||
/XD dirs … | excludeți directoarele care se potrivesc cu nume/căi date. | /XF și / XD pot fi utilizate în combinație, de ex. ROBOCOPIE c:\source d:\dest / XF *.doc *.XL /XD c:\unwanted / S | ||
/IA: | Include fișiere cu oricare dintre atributele date | |||
/Xa: | excludeți fișierele cu oricare dintre atributele date | |||
/IM | suprascrie fișierele modificate. Aceasta include aceleași fișiere cu momente diferite. | |||
/este | suprascrie fișiere, chiar dacă acestea sunt deja la fel | |||
/acesta | includ fișiere optimizat | |||
/XJ | excludeți punctele de joncțiune de la sursă | / XJ | ||
/XJD | Exclude punctele de joncțiune din directoarele sursă | |||
/XJF | Exclude punctele de joncțiune din fișiere sursă | |||
/MAX: n | Exclude fișiere mai mari decât n octeți | |||
/MIN: n | Exclude fișiere mai mici decât n octeți | |||
/MAXLAD: n | excludeți fișierele neutilizate de la n | |||
/MINLAD:n | excludeți fișierele utilizate de la n | dacă n < 1900 atunci n = n zile, altfel n = data YYYYMMDD | ||
/MIR | oglindește un arbore de directoare | /epurare / E | ||
/PURGE | șterge fișierele/folderele dest care nu mai există în sursă | |||
/XL | excludeți fișierele prezente în sursă, dar nu în destinație | |||
/SECFIX | Robocopy / secfix remediază fișierul securitate pe toate fișierele, chiar și fișiere omise. | specificați tipul de informații de securitate pe care doriți să le copiați utilizând și una dintre aceste opțiuni: / COPYALL/COPY: o / COPY: S / COPY: U / SEC | ||
/ZB | utilizați modul restartabil; dacă accesul este refuzat, utilizați modul de rezervă |
Opțiuni de monitorizare
comutator | explicație | comportament implicit | comutator echivalent | Note |
/R:n | Numărul de încercări repetate la copii eșuate | / R:1000000 | încercați întotdeauna să setați această opțiune. Vă recomandăm să setați acest lucru la 10-20 pentru a nu pierde timpul reîncercând. | |
/W: n | timp de așteptare între reîncercări | / W:30 | încercați întotdeauna să setați această opțiune la un număr mai mic pentru a încerca din nou mai repede. Sugerez 5-10. | |
/REG | Salvați / R: N și / W: N în registrul Windows ca setări implicite | |||
/RH:hhmm-hhmm | ori când pot fi pornite copii noi | |||
/TBD | așteptați ca sharenames să fie definite | încercați din nou eroare 67 | ||
/PF | verificați orele de rulare pe baza unui fișier (nu pe trecere) | |||
/MON: n | alerga din nou atunci când mai mult de n modificări văzut | |||
/MOT:m | rulați din nou în M minute, dacă este schimbat |
înțelegerea comportamentului Robocopy
acum am suflat complet mintea ta cu toate opțiunile potențiale de sintaxă disponibile pentru tine. Să vedem acum toate combinațiile diferite ale modului în care putem folosi această sintaxă.
v-aș putea oferi o listă extrem de lungă de comenzi robocopy cu un număr tot mai mare de comutatoare. Dar cred că e mai bine să te învăț cum să pescuiești. Să trecem peste modul de a pune sens din toate aceste opțiuni.
Robocopy copiază numai directoare întregi
fiecare execuție robocopy va avea o sursă și un director de destinație. Copii Robocopy și se mută fișiere de întregul director. Nu este posibil să copiați în mod explicit un singur fișier cu robocopy. Utilizați copy
sau PowerShell ‘ s Copy-Item
pentru asta.
cu toate acestea, puteți robocopia un singur fișier cu filtrarea corectă despre care veți afla mai jos. Pentru a robocopia un singur fișier, specificați directoarele sursă și destinație imediat urmate de numele fișierului din sursă.
> robocopy c:\src d:\dst copythisfile.txt
sintaxa depinde de mediu
de asemenea, opțiunile pe care le oferiți robocopiei vor depinde de mediu. Va trebui să răspundeți la câteva întrebări atunci când încercați să aflați ce opțiuni să utilizați.
- veți copia întotdeauna într-un director gol?
- este posibil ca fișierele să existe deja în directorul de destinație?
- veți copia terabytes de date sau doar câțiva megabytes?
- veți copia fișiere printr-o rețea sau local?
- … și mai mult.
dacă nu există fișiere în directorul de fișiere destinație, nu ar trebui să vă pese de opțiunile care suprascriu fișierele. Dacă nu veți copia fișiere prin rețea, nu vă faceți griji cu privire la aceste opțiuni. Definiți în mod explicit circumstanțele actuale și potențiale viitoare în care se va afla mediul dvs.
recunoaște opțiunile implicite
Robocopy folosește o mulțime de opțiuni în mod implicit. Le puteți alege uitându-vă la mesele de mai sus. Acesta oferă, de asemenea, o ieșire la îndemână pentru fiecare dată când executați utilitarul.
puteți vedea mai jos că atunci când am rulat robocopy cu opțiunile sale cele mai de bază (folderul sursă și destinație), a folosit automat unele opțiuni. Înțelegerea comportamentului implicit este importantă.
consultați opțiunile pe care le vedeți în ieșire cu explicațiile opțiunii de mai sus și veți înțelege exact ce face robocopy sub copertine.
înțelegerea a ceea ce pot face comenzile Robocopy
dacă ați folosit copy
sau cmdleturile PowerShell Copy-Item
, probabil că ați specificat o sursă și o destinație și ați continuat ziua. Nu există o mulțime de opțiuni pe care le puteți configura acolo. Aceste comenzi robocopy au un comportament implicit.
dar robocopy, pe de altă parte, înțelege mult mai mult și vă oferă flexibilitatea de a modifica comportamentul cât doriți.
este important să știți că robocopy nu este doar conștient de conceptul unui fișier sau director. Există mult mai mult pentru un sistem de fișiere decât asta și robocopy acceptă aproape totul.
un fișier așezat pe un sistem de fișiere nu este doar un obiect prost cu un singur scop. Există multe atribute și lucruri diferite care merg cu conceptul de fișier. De exemplu, un fișier are atribute precum:
- un marcaj de timp (scris, modificat și accesat)
- NTFS ACL
- un proprietar
- NTFS informații de audit
- Pavilion ascuns
- Pavilion arhivat
când copiați sau mutați un fișier, aveți opțiunea de a aduce toate aceste lucruri împreună cu el, dacă doriți.
înțelegeți că atunci când rulați robocopy, nu copiați doar un fișier, ci copiați și toate celelalte informații cu acesta. Este important să realizăm că și pentru a ține cont de ea în opțiunile pe care le oferă robocopy.
Elementele De Bază: Efectuarea Whatif scenarii
dacă ai un server de fișiere imens undeva pe care doriți să migreze și nu doresc să ia nici o acțiune încă, puteți utiliza robocopy pentru a reveni ceea ce ar fi făcut.
folosind opțiunea /L
, îi puteți spune lui robocopy să enumere toate fișierele și/sau folderele pe care le specificați și să returneze o listă de fișiere pe care le-ar fi copiat/mutat.
puteți utiliza opțiunea /L
cu orice altă opțiune. Aceasta este o modalitate excelentă de a returna toate opțiunile pe care robocopy le-ar fi folosit (implicit sau nu). Acesta vă va oferi o imagine de ansamblu a ceea ce va face robocopy având în vedere opțiunile pe care le-ați furnizat.
elementele de bază: copierea fișierelor
cea mai de bază utilizare a robocopy este utilizarea unui director sursă și destinație fără opțiuni.
> robocopy C:\src C:\dst
această opțiune va copia toate fișierele (cu excepția subfolderelor) din C:\src la C:\dst.
de asemenea, puteți copia totul, inclusiv subfolderele (goale sau nu) și permisiunile NTFS. Aceasta este, din ceea ce pot spune, metoda de a copia literalmente tot ce există despre un director de fișiere într-un alt director.
mai jos copiez toate ACL-urile NTFS, proprietarii de fișiere, subfolderele (inclusiv cele goale) și toate atributele fișierului. Toate acestea sunt posibile doar cu opțiunea /E
pentru a include toate subfolderele goale și /COPYALL
pentru a prinde restul.
> robocopy C:\src C:\dst /E /COPYALL
elementele de bază: mutarea fișierelor
mutarea fișierelor transferă fișiere dintr-un director în altul la fel ca copierea. Singura diferență cu o operație de mutare este că fișierele sursă sunt eliminate după copiere.
pentru a șterge fișierele/directoarele din sursă după copiere, utilizați opțiunea /MOV
. Aceasta va elimina toate fișierele din directorul specificat (fără subfoldere).
> robocopy C:\src C:\dst /MOV
de asemenea, puteți utiliza /MOVE
pentru a muta toate fișierele și subfolderele.
> robocopy C:\src C:\dst /MOVE
elementele de bază: sincronizarea fișierelor
Robocopy vă permite să sincronizați două directoare. Acest lucru înseamnă fie asigurarea toate fișierele din Directorul de destinație sunt în directorul sursă și nu mai mult. /MIR
va reproduce datele copiind toate fișierele din sursă nu în destinație și va șterge fișierele din destinație nu în sursă. Feriți-vă!
> robocopy C:\src C:\dst /MIR
copierea fișierelor într-o rețea
dacă copiați fișiere într-o rețea, există câteva opțiuni pe care ar trebui să le luați în considerare.
Robocopy vă permite să copiați fișiere în modul restartable folosind opțiunea /Z
. Aceasta înseamnă că, dacă un fișier începe copierea și eșuează la jumătatea distanței, copia poate începe din nou în loc să eșueze complet. Opțiunea /Z
este utilă atunci când fluxul este tăiat printr-o rețea.
avertisment: unii au raportat utilizarea
/Z
reduce performanța de 1/4. Lasă-mă să știu concluziile tale.
de asemenea, puteți utiliza opțiunea /FFT
. Acest comutator a fost cunoscut pentru a păstra mai precis marcajele de timp ale fișierelor atunci când se transferă printr-o rețea. Această opțiune utilizează marcajele de timp ale sistemului de fișiere FAT în loc de NTFS.
robocopy C:\src \SRV1\share /Z /FFT
utilizarea /IPG pentru a controla decalajul între pachete
când copiați fișiere într-o rețea, puteți utiliza comutatorul /IPG
. Aceasta este, de asemenea, cunoscută sub numele de opțiunea inter-packet gap. Această opțiune definește (în milisecunde) frecvența în care robocopy va aștepta între trimiterea de pachete noi.
folosiți întotdeauna căile UNC nu literele de unitate
un cititor de pe Reddit a descoperit calea grea de a nu utiliza unitățile mapate ca director de destinație. În schimb, utilizați întotdeauna utilizați întotdeauna o cale UNC. S-ar putea să întâmpinați probleme cu limita de 256 de caractere dacă faceți acest lucru. Consultați acest document Microsoft pentru mai multe informații.
Robocopy Backup Mode (Robocopy /Z)
Robocopy are o opțiune (/B
) sau ca o copie de rezervă în modul restartable (/ZB
) care copiază fișierele în modul backup. Ce este „modul de rezervă” oricum?
când copiați de obicei un fișier în Windows și apăsați un fișier care necesită privilegii administrative pentru a accesa, veți primi o eroare care indică faptul că nu aveți permisiunea. Chiar dacă este posibil să rulați ca administrator local, Windows nu vă va permite să îl accesați.
avertisment: au fost raportate volume de server corupte la copierea datelor pe un server Windows Server 2016 cu de-duplicarea activată. Când utilizați comutatorul
/ZB
, rezultatul va fi un magazin dedup bucată fiind distrus în informațiile de volum de sistem. Fișierele copiate nu vor putea fi citite și vor genera erori atunci când încearcă să le manipuleze. Link Serverfault cu mai multe informații.
modul de Backup este o modalitate de a accesa fișiere fără griji cu privire la permisiuni.
Robocopy utilizează modul de backup pentru a utiliza SeBackupPrivilege pentru citirea fișierelor și dreptul Utilizatorului SeRestorePrivilege de a accesa orice fișiere de care are nevoie. Acest lucru ignoră orice Ași care în mod normal ar împiedica accesarea acestor fișiere.
drepturile de utilizator SeBackupPrivilege și SeRestorePrivilege sunt atribuite în mod normal utilizatorilor din grupurile de operatori și administratori de rezervă, dar uneori pot fi eliminați. Modulul Backup elimină acest risc și acordă temporar utilizatorului care execută robocopy aceste drepturi.
dacă doriți să verificați dacă contul dvs. de utilizator are acest drept, puteți rula whoami /priv
și ambele drepturi ar trebui afișate.
filtrare fișiere și foldere
marea majoritate a opțiunilor disponibile pentru tine sunt de a exclude fișiere și directoare mai multe moduri diferite. Am defalcat toate modurile în care puteți filtra sau exclude fișiere și directoare pe baza diferitelor criterii.
după numele fișierului sau extensia fișierului
filtrarea fișierelor copiate/mutate într-un apel robocopy se face folosind metacaractere. Puteți utiliza un wildcard pentru a filtra fișierele care corespund unui anumit șir de nume de fișier sau unei extensii.
de exemplu, pentru a copia numai fișiere TXT, puteți specifica *.txt.
> robocopy C:\src C:\dst *.txt
dacă doriți să limitați doar fișierele care încep cu a, puteți utiliza a*.
> robocopy C:\src C:\dst a*
Y0u poate oferi, de asemenea, mai multe seturi de potriviri de nume de fișier, separându-le cu un spațiu așa cum se arată mai jos.
> robocopy C:\src C:\dst a* b*
când filtrați după numele fișierului, robocopy vă va afișa filtrul în ieșire.
după numele directorului
Robocopy vă permite să filtrați elementele nu doar după fișier, ci și după numele directorului. Folosind robocopy /xd
, puteți exclude anumite directoare care se potrivesc unui anumit nume.
când copiați mai multe foldere, utilizați comutatorul /XD
pentru a exclude folderele din rulare.
> robocopy C:\src C:\dst /XD "c:\src\exclude"
de file/Directory Timestamp
mai jos veți găsi toate opțiunile robocopy care vor exclude fișierele și folderele bazate pe diferite atribute timestamp.
comutator | explicație |
/DCOPY: T | marcajele de timp ale directorului de copiere |
/MAXAGE: n | excludeți fișierele mai vechi de n zile/dată |
/Minaj:n | excludeți fișierele mai noi de n zile/dată |
/XO | Dacă fișierul destinație există și are aceeași dată sau este mai nou decât sursa, nu suprascrieți |
/XN | Dacă fișierul destinație există și are aceeași dată sau este mai vechi decât sursa, nu suprascrieți |
există două opțiuni populare pentru a alege atunci când filtrarea pe lucruri cum ar fi timestamp; /XO
și /MAXAGE
.
/XO
vă permite să excludeți fișierele din copiere numai dacă sunt mai noi decât sursa. Folosind opțiunea /XO
, puteți robocopia numai fișiere noi după data de acces.
> robocopy C:\src C:\dsc /XO
dacă știți că fișierele de vârstă maximă vor fi, puteți utiliza și opțiunea /MAXAGE
. Aceasta vă permite să specificați în format YYYMMDD data mai veche pe care o poate avea un fișier înainte de a fi copiat.
> robocopy c:\src c:\dst /S /MAXAGE:20191001
Robocopy Jobs
ați văzut că zeci de opțiuni sunt disponibile pentru tine. Este ușor ca aceste opțiuni să devină în curând greoaie. Din fericire, aveți o opțiune mai bună decât memorarea și asigurarea tuturor acestor opțiuni sunt la fața locului de fiecare dată.
fișierele Robocopy job sunt fișiere text care conțin o opțiune pe linie. De obicei, veți utiliza robocopy pentru a crea aceste fișiere de locuri de muncă. Odată creat, puteți utiliza fie robocopy pentru a le modifica, fie un simplu editor de text.
aveți diverse comenzi robocopy care lucrează cu locuri de muncă.
comutator | explicație | comportament implicit | comutator echivalent | Note |
/JOB: jobname | ia parametrii din fișierul job numit | |||
/salvează:jobname | salvează parametrii în fișierul job numit | |||
/QUIT | Quit după procesarea liniei de comandă | util pentru vizualizarea parametrilor | ||
/NOSD | nu este specificat niciun director sursă | |||
/NODD | nu este specificat niciun director de destinație | |||
/dacă | includeți următoarele fișiere |
un fișier tipic de job creat cu robocopy are o extensie RCJ și arată ca fragmentul de mai jos. Acest fișier job a fost creat prin rularea robocopy C:\src D:\dst /save:myjob
. Puteți vedea că puteți furniza comentarii în fișierul job folosind ::
care este cea mai mare parte a ceea ce are acest fișier.
fără comentarii, fișierul ar conține doar o opțiune pe linie.
:::: 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 :::
salvarea fișierelor Job
Salvarea unui fișier job este la fel de simplă ca adăugarea opțiunii /SAVE:<jobname>
la sfârșitul sintaxei. Înlocuiți <jobname>
cu numele lucrării. Opțiunea /SAVE
va crea un fișier numit <jobname>.rcj în directorul în care ați rulat robocopy.
> robocopy C:\src C:\dst /SAVE:myjob
trebuie să specificați /SAVE
ca ultima opțiune. Toate opțiunile specificate după /SAVE
nu vor fi adăugate la fișierul job. De asemenea, rețineți că, chiar dacă există deja un fișier de job existent, robocopy îl va suprascrie întotdeauna pe cel existent. Backup sau versiunea controla fișierele de locuri de muncă!
Notă: Dacă încercați să utilizați opțiunea
/MT
când salvați într-un fișier job, acesta nu va fi în fișierul job. Anunță-mă dacă ai reușit să incluzi asta.
utilizarea fișierelor Job
odată ce un job este salvat într-un fișier job, puteți utiliza opțiunea /JOB:<jobname>
pentru a specifica fișierul job din care să citiți. Robocopy citește toți parametrii din interiorul fișierului de locuri de muncă. Apoi se execută la fel ca și cum ați furnizat opțiunile direct pe linia de comandă.
> robocopy /JOB:myjob
crearea unui fișier Job fără rularea unui Job folosind /QUIT
scopul opțiunii /QUIT
nu este evident. La suprafață, s-ar putea să credeți că /QUIT
forțează o alergare să iasă. În schimb, /QUIT
acționează mai mult ca o opțiune pentru a împiedica rularea unui loc de muncă în primul rând.
Oficial, opțiunea /QUIT
„forțează robocopia să înceteze procesarea liniei de comandă”. Cu toate acestea, ar fi mai bine explicat ca crearea unui fișier de locuri de muncă fără a rula un loc de muncă.
dacă utilizați opțiunea /SAVE
, aceasta va rula automat lucrarea. Nu există nicio modalitate de a crea un fișier de locuri de muncă fără a rula mai întâi lucrarea. Ai putea crea fișierul de locuri de muncă RCJ cu un editor de text sau ai putea folosi robocopy face prin adăugarea /QUIT
până la sfârșit.
> robocopy C:\src C:\dst /SAVE:myjob /QUIT
editarea unui fișier de locuri de muncă
deoarece fișierele de locuri de muncă sunt doar fișiere text, le-ar putea edita cu editorul de text preferat sau ai putea avea robocopy face pentru tine.
puteți edita fișiere job utilizând o combinație de /JOB
, /SAVE
și /QUIT
.
de exemplu, poate doriți să excludeți toate fișierele EXE din jobul robocopy salvat într-un fișier job numit backupfiles.rcj. Ați creat deja fișierul job și nu doriți să suprascrieți întregul lucru. Puteți adăuga noua opțiune ca mai jos:
> robocopy /JOB:backupfiles /XF *.EXE /SAVE:backupfiles /QUIT
utilizarea mai multor fișiere Job
puteți combina chiar și utilizarea fișierelor job. Când specificați mai multe fișiere de lucru în aceeași rulare, toate opțiunile utilizate în acea rulare vor fi combinate împreună.
de exemplu, poate că aveți o listă mare de fișiere pentru a exclude din backupfiles copie de locuri de muncă. Deschideți un editor de text și adăugați următoarele pentru a crea o excludere.fișier rcj.
/XF a.exe b.txt c.cer
puteți exclude apoi aceste fișiere din lucrarea backupfiles ca atare:
> robocopy /JOB:backupfiles /JOB:exclude
deoarece fișierul original backupfiles job excludea deja toate fișierele EXE, sintaxa rulării de mai sus ar arăta /XF *.exe a.exe b.txt c.cer
. Robocopy combină toate opțiunile într-o singură.
Robocopy șabloane și folosind opțiunile /NOSD și /NODD
dacă lucrați cu o mulțime de fișiere de locuri de muncă, puteți construi fișiere de locuri de muncă pentru a accepta parametrii. Robocopy vă permite să treacă valori de la linia de comandă la locuri de muncă atunci când acestea sunt rulate. Un parametru nu este un termen de robocopie, dar se potrivește bine în acest scenariu.
puteți construi robocopy locuri de muncă pentru a accepta parametrii de a nu specifica o sursă sau director de destinație, fie în mod explicit folosind /NOSD
și /NODD
opțiuni sau pur și simplu nu include o sursă și director de destinație, la toate.
pentru un exemplu simplu, creați un fișier job fără sursă sau destinație folosind sintaxa de mai jos. Intenția acestui loc de muncă este de a copia toate fișierele TXT și EXE dintr-o sursă într-un director de destinație.
> robocopy *.txt *.exe /SAVE:backupfiles /QUIT
pe cont propriu, Acest loc de muncă nu va funcționa pentru că nu există nici o sursă sau director de destinație specificat.
când creați un job fără director sursă și destinație, fișierul job este creat automat utilizând opțiunile /NOSD
și /NODD
.
/NOSD /NODD/IF *.txt *.exe/DCOPY:DA/COPY:DAT/R:1000000/W:30
opțiunile /NOSD
indică faptul că robocopy nu a inclus un director sursă, în timp ce /NODD
indică faptul că nu a inclus un director de destinație. Acest fișier de locuri de muncă este un „șablon” pentru alte locuri de muncă.
dar puteți trece „parametri” la acest fișier de lucru pentru a furniza directoarele sursă și destinație.
pentru a utiliza fișierul job creat doar pentru a copia fișiere din C:\src la C:\dst, puteți trece aceste directoare direct pe linia de comandă, care va fi apoi trecut la locul de muncă.
> robocopy /JOB:backupfiles C:\src C:\dst
Copiere asincronă (Robocopy /MT)
în mod implicit, robocopy procesează doar un fișier la un moment dat. Cu toate acestea, puteți forța robocopy să copieze mai multe fișiere decât simultan utilizând opțiunea /MT
.
opțiunea /MT
vă permite să specificați numărul de fire pe care robocopy le va folosi pentru a copia fișiere. Maximul este de 128.
puteți folosi /MT
așa:
> robocopy C:\src C:\dst /MT:32
am ales 32 în acest caz ca bază. Vă sugerez să începeți de la 32 pentru a vedea cum computerul și rețeaua gestionează lucrurile și ajustați firele în consecință.
rețineți că dacă utilizați
/MT
, nu veți putea utiliza/IPG
sau/EFSRAW
. Pentru o performanță mai bună, nu scoateți jurnalul în consolă. În schimb, utilizați/LOG
.
programarea Robocopy
Robocopy are câteva moduri în care puteți programa atunci când rulează.
folosind /RH
folosind opțiunea /RH
, puteți spune robocopy să ruleze numai într-un anumit timp. Acest lucru este minunat dacă aveți o fereastră de întreținere sau un moment în care toată lumea a plecat acasă pentru a doua zi.
puteți specifica ora de începere și ora de terminare în formatul HHMM-HHMM. De exemplu, pentru a invoca robocopy, dar numai permite să ruleze între orele de 5PM și 9AM așa cum este definit de ceasul de sistem, executați:
> robocopy C:\src C:\dst /RH:1700-0900
veți vedea că, dacă invocați robocopy în afara acestor ore, vă va spune ora curentă și așteptați pentru Ora de începere pentru a rula.
trebuie să vă asigurați că ambele momente sunt într-un format de 24 de ore și au exact patru cifre. Fereastra trebuie să fie mai mare de două minute.
în mod implicit, utilizarea /RH
va verifica ora de începere înainte de întreaga rulare. Cu toate acestea, dacă aveți o mulțime de fișiere și credeți că procesul poate dura mai mult decât atât, puteți utiliza opțiunea /PF
. /PF
va forța robocopy să verifice fereastra înainte de fiecare fișier.
utilizarea Planificatorului de activități
Jurnalul de ieșire
Robocopy va returna întotdeauna un jurnal de ieșire. Dacă acel jurnal este afișat prin stdout pe consolă și / sau redirecționat către un fișier jurnal, depinde de dvs.
aveți o mulțime de opțiuni atunci când afișați ieșirea robocopy.
comutator | explicație | comportament implicit | comutator echivalent | Note |
/NP | nici un progres. Suprimă afișarea informațiilor despre progres. Acest lucru poate fi util atunci când ieșirea este redirecționată către un fișier. | |||
/unicode | afișează ieșirea de stare ca text unicode | |||
/jurnal: fișier | starea de ieșire pentru a înregistra fișierul și a suprascrie | |||
/UNILOG: fișier | starea de ieșire la fișierul jurnal unicode și suprascrie | |||
/LOG+:fișier | starea de ieșire pentru a înregistra fișierul și a adăuga fișierul jurnal existent | |||
/UNILOG+: fișier | starea de ieșire la fișierul jurnal unicode și adăugați la fișierul jurnal existent | |||
/TS | afișează marcajele de timp ale fișierului pentru fiecare fișier procesat. | |||
/FP | înlocuiește nume de fișiere simple cu nume de cale de fișier complet în ieșire. | |||
/NS | nu afișează dimensiunile fișierelor. | |||
/NC | ascunde ieșirea clasei de fișiere ” etichete Text „(accesați AICI pentru mai multe informații: https://www.uvm.edu/~gcd/2015/04/robocopy-file-classes/) | |||
/NFL | ascunde numele fișierelor. Eșecurile sunt încă înregistrate. Orice fișiere fișierele șterse sau ar fi șterse dacă / l a fost omis sunt întotdeauna înregistrate | |||
/NDL | ascunde ieșirea listării directorului. Numele de cale ale fișierelor complete sunt afișate pentru a urmări mai ușor fișierele problematice. | |||
/TEE | ieșire la fereastra consolei, precum și fișierul jurnal | |||
/NJH | nici un antet de locuri de muncă | |||
/NJS | nici un rezumat de locuri de muncă | |||
/octeți | dimensiuni de imprimare ca octeți | |||
/X | raportează toate fișierele, nu doar cele selectate & copiate | |||
/V | Produce jurnal de ieșire verbose, care arată fișiere omise | |||
/eta | arată ora estimată de sosire a fișierelor copiate. Consultați ora de începere a fiecărei copii de fișier și timpul estimat de finalizare pe baza debitului observat al copiilor anterioare. Orele sunt afișate după numele fișierului în formatul HH:MM – > HH:MM (start – > finish). | |||
/DEBUG | afișează informații despre volumul de depanare |
limitarea elementelor de jurnal cu / NJS și / NJH
în mod implicit, robocopy returnează două elemente în ieșirea sa, un antet de job și un rezumat de job.
antetul job este antetul ROBOCOPY simplu din partea de sus.
rezumatul lucrării arată o stare sumară a tuturor fișierelor / folderelor, cât de multe date au fost transferate și timpul în care s-a încheiat rularea.
puteți ascunde fiecare dintre aceste elemente utilizând opțiunea /NJH
pentru a ascunde antetul lucrării și opțiunea /NJS
pentru a ascunde rezumatul lucrării. Puteți include oricare dintre aceste opțiuni sau ambele împreună.
redirecționarea Jurnalului de ieșire către un fișier
dacă trebuie să salvați jurnalul de ieșire, îl puteți redirecționa către un fișier text și/sau îl puteți afișa pe consolă. Puteți face acest lucru folosind redirectoare tradiționale de ieșire, cum ar fi >
, >>
, PowerShell sau opțiunea /LOG
.
pentru a redirecționa Jurnalul de ieșire către un fișier folosind opțiunea /LOG
suprascrierea oricărui fișier jurnal existent, utilizați sintaxa /LOG:<filepath>
ca mai jos. Singura ieșire pe care o veți primi pe consolă este calea către fișierul jurnal.
> robocopy C:\src C:\dst /LOG:c:\file.log Log File : c:\file.log
dacă doriți să păstrați conținutul oricărui fișier jurnal existent și să adăugați rezultatele la un fișier, puteți utiliza operatorul +
așa cum se arată mai jos.
> robocopy C:\src C:\dst /LOG+:c:\file.log Log File : c:\file.log
redirecționarea Jurnalului de ieșire către un fișier și afișarea pe consolă
dacă doriți să salvați jurnalul de ieșire într-un fișier, dar îl vedeți și pe consolă, puteți utiliza opțiunea /TEE
. Această opțiune face ca robocopy să scrie ieșirea în fișierul jurnal, menținând în același timp comportamentul implicit al returnării ieșirii în consolă.
robocopy C:\src C:\dst /LOG+:c:\file.log /TEE
coduri de ieșire
ca toate celelalte utilitare din linia de comandă, robocopy returnează codurile de ieșire în funcție de rezultatele execuției. Cu toții ne dorim ca robocopia să iasă întotdeauna cu succes cu un 0
, dar asta nu se întâmplă întotdeauna.
mai jos veți găsi tot codul de ieșire pe care robocopy îl returnează și explicația acestora. Orice cod de ieșire mai mare de șapte indică cel puțin o eroare în timpul executării.
cod de ieșire | explicație |
0 | nici o acțiune efectuată. Sursa și destinația sunt sincronizate. |
1 | cel puțin un fișier a fost copiat cu succes. |
2 | au fost detectate fișiere sau directoare suplimentare. Examinați Jurnalul. |
3 | codurile de ieșire 2 și 1 combinate. |
4 | fișiere nepotrivite sau directoare găsite. Examinați Jurnalul. |
5 | codurile de ieșire 4 și 1 combinate. |
6 | codurile de ieșire 4 și 2 combinate. |
7 | codurile de ieșire 4, 1 și 2 combinate. |
8 | cel puțin un fișier sau director nu a putut fi copiat. Reîncercați limita depășită. Examinați Jurnalul. |
16 | copia a eșuat catastrofal. |
rețineți că, dacă executați robocopy într-un utilitar terț, utilitarul respectiv poate crede că orice cod de ieșire diferit de zero este un eșec. Pentru a preveni acest lucru, puteți schimba codul de ieșire la 0 dacă returnează 1.
codul de ieșire al fișierului „extra” Robocopy este un cod de retur comun, ceea ce înseamnă că un fișier „extra” se află în folderul destinație, dar nu în folderul sursă. Acest cod exclude extras care va preveni orice ștergeri de la destinație.
Schimbarea codului de ieșire într-un fișier Batch
dacă executați robocopy cu un fișier batch, puteți găsi valoarea variabilei %ERRORLEVEL%
. Dacă returnează 1, utilizați cuvântul cheie exit
pentru a ieși din script cu 0.
> (robocopy <options>) ^& IF %ERRORLEVEL% LEQ 1 exit 0
Schimbarea codului de ieșire într-un script PowerShell
dacă executați robocopy într-un script PowerShell, puteți invoca robocopy cu Start-Process
folosind PassThru
pentru a returna procesul creat și Wait
pentru a aștepta finalizarea robocopy. Apoi puteți verifica proprietatea ExitCode
pentru o valoare de 1. Dacă codul de ieșire este 1, atunci ieșiți din scriptul PowerShell cu un 0 folosind $host.SetShouldExit()
.
$exitCode = (Start-Process -FilePath 'robocopy' -ArgumentList '<option>' -PassThru -Wait).ExitCodeif ($exitCode -eq 1) { $host.SetShouldExit(0)}
Erori comune
dacă aveți de-a face cu mii de fișiere, sunteți obligat să executați unele probleme. Iată o defalcare a erorilor comune pe care le-am întâlnit
eroare parametru nevalid
când vedeți o eroare care să ateste eroare parametru nevalid, acest lucru înseamnă în mod normal că ați încercat să treceți opțiunile pentru a robocopia din secvență cumva. Se pare că eroarea parametrului invalid robocopy 3 este cea mai frecventă.
un motiv comun pentru care primiți această eroare este atunci când specificați un director sursă sau destinație cu spații și uitați să îl înconjurați cu ghilimele.
Robocopy Exemple
puteți construi propriile siruri de caractere de robocopy sau puteți lua ceea ce alții au învățat și să le folosească! În această secțiune, voi acoperi cazuri de utilizare cu privire la modul de utilizare a robocopy pentru a realiza diverse lucruri.
găsiți dimensiunea directorului unui folder de rețea
colaborator: northendtroooper (Reddit)
> robocopy "\MACHINE\fileshare" c:\dummy /l /xj /e /nfl /ndl /njh /r:0 /mt:64
ștergeți rapid conținutul folderului (ignorând permisiunile pe subfoldere)
colaborator: pizzasteveo (Reddit)
> robocopy c:\dummy c:\foldertodelete /MIR
efectuarea migrațiilor de fișiere mari
colaborator: @MySnozzberries (Twitter)
scopul acestui fragment este de a forța proprietatea asupra tuturor fișierelor înapoi administratorilor. Apoi adăugăm un As explicit pentru grupul administratori pentru control complet asupra fiecărui obiect recursiv, chiar dacă setăm și moștenirea.
în cele din urmă, vom face o copie completă robocopy cu DACLs la destinație cu jurnal. Jurnalul poate fi apoi revizuit pentru probleme suplimentare de permisiune sau doar încuietori de fișiere și o altă sincronizare delta poate fi efectuată mai târziu.
> 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
recursiv forța administratori grup ca proprietar al tuturor fișierelor și directoarelor. Pot exista modalități în jurul acestui lucru, dar aceasta este cea mai grea abordare și, de obicei, cea mai rapidă.
> takeown /F .\test /R /A /D Y
odată ce suntem proprietarul, acum putem forța un nou AS în DACL pentru fiecare obiect. Acest lucru acordă administratorilor control complet cu moștenire activat și recursiv prin calea.
setarea acestui lucru la rădăcină cu moștenire ar acoperi mediul, dar atunci când o acțiune are proprietarul Creatorului cu Control complet (ceea ce, din păcate, este chiar recomandarea Microsoft pentru lucruri precum magazinele de profil de utilizator de fișiere), utilizatorul poate dezactiva moștenirea sau elimina Ași la discreția lor. Deci, o mână grea este de obicei cea mai rapidă soluție.
> icacls .\test /grant "Administrators":(OI)(CI)F /T
odată ce am schimbat dacl-urile pe majoritatea fișierelor, încercăm să copiem fișierele într-o locație nouă, comună pentru lucruri precum migrațiile de partajare a fișierelor. Pentru aceasta, copiem elementele recursiv și folosim comutatorul /SEC
pentru a copia și datele/atributele/marcajele de timp/DACLs.
apoi ne-am conecta operațiunea cu căi complete și pentru toate obiectele (/V
verbose switch) la un jurnal, astfel încât să putem remedia < 5% din Erorile care sunt de obicei lungime cale sau fișier de blocare legate și de a lua mai granular.
> robocopy .\test .\test2 /E /SEC /FP /V /LOG:.\temp.log
acesta este un cadru simplu pentru gestionarea unei migrări de partajare de fișiere cu impact minim asupra experienței utilizatorului. De asemenea, îmbunătățește controlul pe care îl deține asupra datelor. Dacă un client are o practică puternică de guvernanță a datelor în care proprietatea este gestionată corespunzător la nivel de folder copil, aceasta devine o discuție mai complicată, dar majoritatea clienților pe care îi găsim sunt norocoși să folosească doar moștenirea și ași pe bază de grup, deci aceasta este cea mai comună situație și remediere de la care începem.
Robocopy Alternative
Robocopy este un instrument minunat, dar există atât de multe alte instrumente similare cu acesta care ar putea fi de interes.
- xxcopy – un utilitar similar de linie de comandă cu tone de opțiuni.
- Copiere-element PowerShell cmdlet – nu aproape la fel de recomandate, dar mult mai simplu.
- TreeSize – GUI și utilitate scriptable pentru a găsi informații dosar.
rezumat
Robocopy este un instrument excelent pentru a copia seturi mari de fișiere. Indiferent dacă efectuați o migrare a datelor, păstrați folderele sincronizate sau pur și simplu aveți nevoie de o modalitate rapidă de a copia cu exactitate fișierele, robocopy este o alegere excelentă.