Robocopy backups |
Don't delay, backup today |
Inleiding
Robocopy is een van de meest gebruikte opdrachtregelprogramma's (command-line) voor het kopiëren en verplaatsen van grote hoeveelheden gegevens in Windows.
Robocopy heeft heel erg veel (onoverzichtelijke) mogelijkheden.
Het is zo'n populair stuk gereedschap omdat het zo krachtig is. Maar met al die kracht komt complexiteit.
Het is geen 'touch-and-go' programma.
Het is iets voor iemand die niet vies is van command-line opdrachten (opgegroeid met MS-DOS, Linux).
Het is iets voor een diehard, een nerd.
Maar als je je verdiept hebt in alle opties dan zie je dat robocopy alles (alles) kan wat moderne backup-programma's ook kunnen.
Wil je beginnen met robocopy: check de voorbeelden.
|
Op deze pagina wordt die complexiteit op een hopelijk begrijpelijke manier weergegeven.
Robocopy is een Windows commando-regel programma dat al beschikbaar is sinds Windows NT, en in Windows 11 is het nog steeds aanwezig.
Het is een uitbreiding van het minder veelzijdige kopieerprogramma xcopy.
Deze pagina is gebaseerd op versie 10.0.18. De laatste versie (uitgegeven in 2021) is 10.0.22000.
De Microsoft documentatie staat in deze link.
Robocopy wiki's: Nederlandstalig, Engelstalig.
Deze pagina is, voor eigen gebruik, een vertaling en samenvatting van
deze link en
deze link.
De uitleg is zoveel mogelijk in het Nederlands geschreven.
Maar robocy is een volledig Engelstalig programma, dus de opdrachten zijn niet vertaald.
Deze pagina is dus een ratjetoe van Engels en Nederlands.
Inhoudsopgave
| |
Versienummer
Verschillende versies van Robocopy geven het versienummer niet weer wanneer robocopy /? wordt uitgevoerd op de opdrachtregel.
Hun versie is echter opgeslagen in het uitvoerbare bestand zelf en kan worden opgevraagd met bijvoorbeeld PowerShell (gcm robocopy | fl *),
of in Windows Verkenner door met de rechter muisknop te klikken op Robocopy.exe, Eigenschappen te selecteren en vervolgens op het tabblad
Details te klikken.
Een overzicht van de versienummers staat in de Engelstalige wiki.
Download robocopy
Het is verleidelijk om zonder al te veel nadenken de laatste versie van robocopy te
downloaden.
Niet doen.
Er zijn tig versies van robocopy in omloop voor speciale Windows versies.
Beheers je en houd het bij de versie die standaard geleverd is bij jouw Windows (welke versie dat ook is).
De mogelijkheden
- bestanden kopiëren via een netwerk, met hervattings(resume)mogelijkheden
- kan NTFS knooppunten overslaan, welke mislukking kan veroorzaken vanwege oneindige lussen
- kan attributen van bestanden en directories kopiëren met behoud van tijdstempels
- kan NTFS machtigingen, eigenaren, en auditing info kopiëren
- kan directory tijdstempels kopiëren
- kan bestanden in 'back-up' modus kopiëren om ervoor te zorgen dat bestanden worden gekopieerd, zelfs die rechten zijn geweigerd aan de beheerder
- heeft automatische hervattings(retrie)mogelijkheden
- kan twee mappen synchroniseren
- is slim genoeg om bestanden over te slaan die al gekopieerd zijn
- kan paden kopiëren welke groter zijn dan de 256 karakters pad limiet
- voert asynchrone kopieën uit met behulp van zijn multithreading mogelijkheid
- geeft gestandaardiseerde exit codes voor gebruik in scripts
| |
Common Robocopy Syntax Reference
Deze tabel is opgebouwd uit de hulp syntax van robocopy /?.
Die info is opgesplitst in meer zinvolle secties, uitgebreid in de loop der tijd, en opgeschoond om meer nuttige info te bieden.
Opties voor de Bron (source) |
Switch | Uitleg | Default gedrag | Vergelijkbare Switch | Opmerkingen |
/S | kopieer subdirectories | |
/E | kopieer subdirectories inclusief lege subdirectories | |
/COPY:[DATSOU] | kopieer options | /COPY:DAT | | D=Datums, A=Attributes, T=Timestamps S=Security=NTFS ACLs, O=Owner info, U=aUditing info. File Data (D) is altijd inclusief file Timestamps (T) |
/SEC | kopieer bestanden met SECurity | /COPY:DATS | |
/DCOPY:T | kopieer tijdstempels (timestamps) | |
/COPYALL | kopieer alle bestands-info | | /COPY:DATSOU | This will prevent dehydrating offline files and will instead copy the file’s tag (on emc VNX/Unity systems at least). This is not officially documented! If dehydration is what you need (reason i found this issue), you can’t copy the ACLs along your files. |
/NOCOPY | kopieer geen bestands-info | | handig met /PURGE |
/A | kopieer alleen bestanden waarvan het archief-attribute is gezet | |
/M | evenals /A, maar verwijder het archief-attribute van de het bronbestand | |
/LEV:n | kopieer allen de top n LEVels van de bron tree | |
/MAXAGE:n | MAXimum bestands AGE – sluit bestanden uit die ouder zijn dan n days/date | |
/MINAGE:n | MINimum bestands AGE – sluit bestanden uit die nieuwer zijn dan n days/date | | If n < 1900 then n = no of days, else n = YYYYMMDD date |
/FFT | Assume FAT File Times | | 2-second date/time granularity. This replaces NTFS timestamps. Seems to be more reliable when transferring over a network. |
/256 | Turn off very long path (> 256 characters) support | |
|
Opties voor de Bestemming (destination) |
Switch | Uitleg | Default gedrag | Vergelijkbare Switch | Opmerkingen |
/A+:[RASHCNET] | voeg de gespecifeerde attributes toe aan de gekopieerde files | | de toegestane waarden zijn: R–Read only, A–Archive, S–System, H–Hidden, C–Compressed, N–Not content indexed, E–Encrypted, T–Temporary |
/A-:[RASHCNET] | verwijder de gespecificeerde attributes bij de gekopieerde files | | de toegestane waarden zijn: R–Read only, A–Archive, S–System, H–Hidden, C–Compressed, N–Not content indexed, E–Encrypted, T–Temporary |
/FAT | op de bestemming: maak bestanden met alleen 8.3 FAT bestandsnamen | |
/CREATE | Create directory tree structure + zero-length files only | |
/DST | Compensate for one-hour DST time differences | |
|
Opties voor het kopieren (copy) |
Switch | Uitleg | Default gedrag | Vergelijkbare Switch | Opmerkingen |
/L | alleen de files weergeven | | kopieert niet, verandert geen timestamp, verwijderd geen files |
/MOV | verplaats bestanden | | verwijder ze van de bron na het kopiëren |
/MOVE | verplaats bestanden en directories | | verwijder ze van de bron na het kopiëren |
/sl | Copy file symbolic links instead of the target | |
/Z | kopieert files in herstart-modus | | Om een netwerk 'hikje' te 'overleven' |
/B | kopieer files in backup mode | |
/J | Copy using unbuffered I/O | | Recommended for large files |
/NOOFFLOAD | Copy files without using the Windows copy offload mechanism | | link |
/EFSRAW | kopieert alle versleutelde files gebruikmakend van EFS RAW mode | |
/TIMFIX | Fix file times on all files, even skipped files | |
/XO | sluit oudere uit | | als de file op de bestemming er al is, en dezelfde datum of nieuwer heeft dan die op de bron – verwijder die file op de bestemming dan niet |
/XC | sluit gewijzigde bestanden uit | |
/XN | sluit nieuwere bestanden uit | |
/XX | sluit bestanden uit die aanwezig zijn in de bestemming, maar niet in de bron | /XX | |
/XF file [file]… | sluit files uit met gespecificeerde namen/paden/wildcards | |
/XD dirs [dirs]… | sluit directories uit met gespecificeerde namen/paden | | /XF en /XD kunnen gecombineerd gebruikt worden, voorbeeld: robocopy c:\bron c:\bestemming /XF *.doc *.xls /XD c:\unwanted /S |
/IA:[RASHCNETO] | inclusief files met gespecificeerde attributes | | de toegestane waarden zijn: R–Read only, A–Archive, S–System, H–Hidden, C–Compressed, N–Not content indexed, E–Encrypted, T–Temporary |
/XA:[RASHCNETO] | sluit bestanden uit met gespecificeerde attributes | | de toegestane waarden zijn: R–Read only, A–Archive, S–System, H–Hidden, C–Compressed, N–Not content indexed, E–Encrypted, T–Temporary |
/IM | overschrijf gewijzigde files, inclusief dezelfde files met een verschillende timestamp | |
/IS | overschrijf files, zelfs als ze identiek zijn | |
/IT | Include tweaked files | |
/XJ | Exclude junction points from source | /XJ | |
/XJD | Exclude junction points from source directories | |
/XJF | Exclude junction points from source files | |
/MAX:n | sluit bestanden uit die groter zijn dan n bytes | |
/MIN:n | sluit bestanden uit die kleiner zijn dan n bytes | |
/MAXLAD:n | sluit bestanden uit die niet gebruikt zijn sinds n | |
/MINLAD:n | sluit bestanden uit die gebruikt zijn sinds n | | als n < 1900 dan n = n dagen, anders n = YYYYMMDD datum |
/MIR | spiegel (mirror) een directory tree | | /PURGE /E | |
/PURGE | verwijder bestanden/directories op de bestemming die niet meer aanwezig zijn in de bron | |
/XL | sluit bestanden uiit die aanwezig zijn in de bron, maar niet in de bestemming | |
/SECFIX | Robocopy /secfix fixes file security on all files, even skipt files | | Specify the type of security information you want to copy by also using one of these options: /COPYALL /COPY:O /COPY:S /COPY:U /SEC |
/ZB | gebruik de herstart mode; als toegang geweigerd is gebruik dan de Backup mode | |
|
Opties voor het monitoren |
Switch | Uitleg | Default gedrag | Vergelijkbare Switch | Opmerkingen |
/R:n | aantal herhaling voor mislukte acties | /R:1000000 | | Probeer altijd deze optie te gebruiken. Advies 10-20 om niet te veel tijd te verspillen.
| /W:n | wachttijd in seconden tussen twee herhalingen | /W:30 | | Probeer altijd deze optie te gebruiken. Advies 5-10 om niet te veel tijd te verspillen. |
/REG | sla /R:n and /W:n op in het Windows register als default settings | |
/RH:hhmm-hhmm | de tijd waarop een nieuwe kopie kan worden gestart | |
/TBD | Wait for sharenames to be defined | | retry error 67 |
/PF | Check run hours on a per file (not per pass) basis | |
/MON:n | Run again when more than n changes seen | |
/MOT:m | Run again in m minutes, if changed | |
| |
Het gedrag begrijpen
Robocopy kopieert alleen gehele mappen
Elke robocopy uitvoering heeft een bron- en een doel map. Robocopy kopieert en verplaatst bestanden per gehele map.
Zonder de specifieke opdracht is het niet mogelijk om een enkel bestand expliciet te kopiëren met robocopy. Gebruik daarvoor (x)copy of PowerShell's Copy-Item.
Om een enkel bestand te robocopyen, specificeer je de bron en doel directories, gevolgd door de bestandsnaam.
Voorbeeld:
robocopy c:\src d:\dst copythisfile.txt |
De opties hangen af van de omgeving
De opties die je aan robocopy meegeeft zullen afhangen van de omgeving.
Je zult een paar vragen moeten beantwoorden als je probeert uit te vinden welke opties je moet gebruiken.
- kopieer je altijd naar een lege map?
- staan er misschien al bestanden in de doelmap?
- kopieer je terabytes aan gegevens, of slechts een paar megabytes?
- kopieer je bestanden via een netwerk of lokaal?
- ...en meer
Als er geen bestanden in de doelmap staan, hoef je je niet druk te maken over opties die bestanden overschrijven.
Als je geen bestanden over het netwerk kopieert, maak je dan ook geen zorgen over die opties.
Definieer expliciet de huidige en mogelijke toekomstige omstandigheden waarin uw omgeving zich zal bevinden.
Standaard (default) opties
Robocopy gebruikt default een groot aantal opties. Je kunt ze vinden in de tabel hierboven.
Elke keer als je het programma uitvoert toont de uitvoer de default gebruikte opties.
Het begrijpen van het default gedrag is belangrijk.
Voorbeeld:
opdracht: | robocopy c:\bron d:\bestemming |
default options: | *.* /DCOPY:DA /COPY:DAT /R:1000000 /W:30 |
|
Begrijpen wat de Robocopy opdrachten kunnen doen
Als je de MS-DOS opdracht 'copy' hebt gebruikt, of PowerShell’s Copy-Item cmdlets, dan heb je waarschijnlijk de bron en de bestemming aangegeven en dat was het.
Die opdrachten hebben niet veel opties om te configureren.
Maar robocopy kan veel meer en geeft flexibiliteit om het gedrag zo veel als je wilt te bepalen.
Het is belangrijk om te weten dat robocopy niet alleen het bestaan van files en directories weet.
Een filesysteem heeft veel meer gegevens dan alleen die twee en robocopy ondersteunt bijna alles.
Een file in een filesysteem is niet alleen een dom object met één doel.
Er zijn veel verschillende attributes en items die met het concept van een file te maken hebben.
Bij voorbeeld kan een file attributes hebben zoals:
- een datum stempel (timestamp) (wanneer geschreven, wanneer gewijzigd, wanneer gebruikt)
- NTFS ACL
- een eigenaar
- NTFS auditing information
- verborgen vlag (hidden flag)
- gearchiveerd vlag (archived flag)
Wanneer je een bestand kopieert of verplaatst, heb je de optie om al die attributes mee te nemen, als je dat wilt.
Begrijp dat wanneer je robocopy uitvoert, je niet alleen een bestand kopieert, je kopieert mogelijk ook alle andere informatie mee.
Het is belangrijk om je dat te realiseren en er rekening mee te houden in de opties die je robocopy geeft.
Uitvoeren van WhatIf Scenarios, de /L optie
Als je ergens een grote bestandsserver hebt die je wilt migreren en je wilt nog geen actie ondernemen, dan kun je robocopy gebruiken om terug te geven wat het gedaan zou hebben.
Met de /L optie, kun je robocopy vertellen om alle bestanden en/of mappen die je opgeeft op te sommen en een lijst te geven van bestanden die gekopieerd/verplaatst zouden zijn.
Je kunt de /L optie met elke andere optie gebruiken.
Dit is een geweldige manier om alle opties terug te krijgen die robocopy zou hebben gebruikt (standaard of niet).
Het geeft je een algemeen beeld van wat robocopy zal doen met de opties die je hebt opgegeven.
De basics: files kopiëren
Het meest basale gebruik van robocopy is de bron nen de bestemmking aangeven zonder verdere opties.
Voorbeeld:
robocopy c:\bron d:\bestemming |
Dit voorbeeld kopieert alle files (behalve subdirectories) van C:\bron naar C:\bestemming.
Je kunt ook alles kopiéren, inclusief subdirectories (leeg of niet leeg) en NTFS permissies.
Dit is, voor zover schrijver dezes bekend, de manier om letterlijk alles wat er is in een directoriy naar een andere directory te kopiëren.
Dat doe je met de /E optie en de optie /COPYALL om al het resterende mee te nemen.
Voorbeeld:
robocopy C:\bron C:\bestemming /E /COPYALL |
De basics: files verplaatsen (move)
Verplaatsen kopieert de files van de ene directory naar de andere (hetzelfde als kopiéren).
Het verschil met kopiéren is dat de files op de bron directory werden verwijderd (niet in subdirectories) na de kopieer opdracht.
Dat doe je met de /MOV optie (verplaatst alleen files) en de /MOVE optie (verplaatst files en directories).
robocopy C:\bron C:\bestemming /MOVE |
De basics: files spiegelen (syncing)
Robocopy kan twee directories synchroniseren.
Dat betekent dat alle files die in de bron directory zitten gekopieerd worden naar de bestemmings directory,
EN (let op!),
dat alle files in de bestemmings directory die niet aanwezig zijn in de bron directory worden verwijderd.
Dat doe je met de /MIR optie.
robocopy C:\bron C:\bestemming /MIR |
Files kopiéren over een netwerk
Als je files kopieert over een netwerk dan zijn er een paar opties om in de gaten te houden.
Robocopy staat u toe om bestanden te kopiëren in 'herstartbare modus' door gebruik te maken van de /Z optie.
Dit betekent dat als een bestand begint te kopiëren en halverwege mislukt, de kopie opnieuw kan beginnen in plaats van helemaal te mislukken.
De /Z optie is handig wanneer de stroom over een netwerk wordt onderbroken.
Waarschuwing: sommigen hebben gemeld dat het gebruik van /Z de prestaties met 1/4 vermindert.
Je kunt ook de /FFT optie gebruiken.
Deze optie staat erom bekend dat de tijdstempels van bestanden nauwkeuriger behouden blijven bij overdracht over een netwerk.
Deze optie gebruikt FAT bestandssysteem tijdstempels in plaats van NTFS.
robocopy C:\bron \SRV1 /Z /FFT |
Gebruik /IPG om Inter-Packet Gap te regelen
Bij het kopiëren van bestanden over een netwerk, kan de /IPG optie gebruikt worden.
Dit is ook bekend als de inter-packet gap optie.
Deze optie bepaalt (in milliseconden) de frequentie waarin robocopy zal wachten tussen het verzenden van nieuwe pakketten.
Gebruik altijd UNC paden, geen stationsletters
Een lezer op Reddit ontdekte op de harde manier om geen gemapte stations te gebruiken als een doelmap.
Gebruik in plaats daarvan altijd een UNC pad.
Als je dat doet, kun je problemen krijgen met de limiet van 256 karakters.
Bekijk deze Microsoft doc voor meer informatie.
Robocopy Backup Mode (/Z)
Robocopy heeft een optie (/B) of als een back-up naar herstartbare modus (/ZB) die bestanden kopieert in back-up modus.
Wat is "back-up modus" eigenlijk?
Wanneer je normaal gesproken een bestand kopieert in Windows en je raakt een bestand dat beheerdersrechten vereist om toegang te krijgen,
dan krijg je een foutmelding dat je geen toestemming hebt. Ook al draai je als lokale administrator, Windows zal je geen toegang geven.
Backup mode is een manier om toegang te krijgen tot bestanden zonder zorgen over de rechten.
WAARSCHUWING: Er zijn meldingen geweest van beschadigde servervolumes bij het kopiëren van gegevens naar een Windows Server 2016-server met de-duplicatie ingeschakeld. Wanneer u de /ZB-switch gebruikt, zal het resultaat zijn dat een dedup chunk store wordt weggegooid in de System Volume Information. De gekopieerde bestanden zullen niet leesbaar zijn en zullen fouten genereren wanneer u ze probeert te manipuleren. Serverfault link met meer info.
Robocopy gebruikt de backup-modus om de SeBackupPrivilege te gebruiken voor het lezen van bestanden en de SeRestorePrivilege gebruikersrecht om toegang te krijgen tot alle bestanden die het nodig heeft. Dit negeert alle ACE's die normaal gesproken de toegang tot deze bestanden zouden verhinderen.
De SeBackupPrivilege en SeRestorePrivilege gebruikersrechten zijn normaal toegewezen aan gebruikers in de groepen Backup Operators en Administrators, maar soms kunnen ze verwijderd worden. Backup module elimineert dat risico en geeft de gebruiker die robocopy uitvoert tijdelijk deze rechten.
Als je wilt controleren of je gebruikersaccount die rechten heeft, kun je whoami /priv uitvoeren en dan zouden beide rechten moeten worden weergegeven.
Filteren op files en folders
Het overgrote deel van de beschikbare opties is om bestanden en mappen op verschillende manieren uit te sluiten.
Op bestandsnaam of bestandsextensie
Filteren welke bestanden worden gekopieerd/verplaatst in een robocopy oproep wordt gedaan met behulp van jokertekens.
Je kunt een jokerteken gebruiken om te filteren op bestanden die overeenkomen met een specifieke bestandsnaam string of extensie.
Bijvoorbeeld, om alleen TXT bestanden te kopiëren, kun je *.txt opgeven.
robocopy C:\bron C:\bestemming *.txt |
Op bestandsnaam of bestandsextensie
Als je alleen bestanden wilt kopiëren die beginnen met a, dan gebruik je a*.
robocopy C:\bron C:\bestemming a* |
Op bestandsnaam of bestandsextensie
Je kunt ook meerdere sets van bestandsnaam overeenkomsten opgeven door ze te scheiden met een spatie zoals hieronder.
robocopy C:\bron C:\bestemming a* b* |
Wanneer je filtert op bestandsnaam, zal robocopy het filter tonen in de uitvoer.
Op naam van de directory
Met robocopy /xd, kun je bepaalde mappen met een specifieke naam uitsluiten.
Wanneer je meerdere mappen kopieert, gebruik dan de /XD optie om mappen uit te sluiten van de run.
robocopy C:\bron C:\bestemming /XD "c:\src\exclude" |
Op bestands/directory tijdstempel
Hieronder staan alle robocopy opties die bestanden en mappen uitsluiten op basis van verschillende tijdstempel attributen.
Switch | Uitleg |
/DCOPY:T | Kopieer map tijdstempels
| /MAXAGE:n | Bestanden ouder dan n dagen/datum uitsluiten
| /MINAGE:n | Bestanden nieuwer dan n dagen/datum uitsluiten
| /XO | Als het doelbestand bestaat en op dezelfde datum of nieuwer is dan de bron, niet overschrijven
| /XN | Als het doelbestand bestaat en dezelfde datum of ouder is dan het bronbestand, niet overschrijven
|
Er zijn twee populaire opties om te kiezen bij het filteren op zaken als tijdstempel; /XO en /MAXAGE.
Met /XO kunt u bestanden uitsluiten van kopiëren als ze nieuwer zijn dan het bronbestand.
Door gebruik te maken van de /XO optie, kun je alleen nieuwe bestanden robokopiëren op toegangsdatum.
robocopy C:\bron C:\bestemming /XO |
Als je weet hoe oud bestanden maximaal mogen worden, kun je ook de /MAXAGE.
Hiermee kun je in YYYMMDD formaat de oudere datum opgeven die een bestand mag hebben voordat het gekopieerd wordt.
robocopy c:\bron c:\bestemming /S /MAXAGE:20191001 |
Jobs
Het is nu wel duidelijk (hopelijk...) dat er tientallen opties beschikbaar zijn.
Het zijn er veel te veel om uit het hootd te leren en te onthouden.
Gelukkig is er een mogelijkheid om er voor te zorgen dat ze elke keer precies goed zijn.
Robocopy opdracht bestanden zijn tekst bestanden met één optie per regel.
Je zult meestal robocopy gebruiken om deze job bestanden te maken.
Eenmaal gemaakt, kun je ze aanpassen met een eenvoudige tekst editor.
Je hebt verschillende robocopy commando's die werken met jobs.
Switch | Uitleg | Default gedrag | Gelijkwaardige switch | Opmerkingen |
/JOB:jobname | Neem parameters over van het genoemde job bestand | |
/SAVE:taaknaam | Sla parameters op in het genoemde taakbestand | |
/QUIT | Afsluiten na verwerken opdrachtregel | | Nuttig voor het bekijken van parameters |
/NOSD | Er is geen brondirectory opgegeven | |
/NODD | Er is geen doelmap opgegeven | |
/IF | Neem de volgende bestanden op | |
Een typisch taakbestand gemaakt met robocopy heeft een RCJ extensie en ziet er uit als het onderstaande fragment.
Dit job bestand is gemaakt door robocopy C:\bron D:\bestemming /save:myjob uit te voeren.
Je kan zien dat je commentaar kan geven in het job bestand door gebruik te maken van :: wat het meeste is van wat dit bestand heeft.
Zonder commentaar zou het bestand maar één optie per regel bevatten.
::
:: 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 :
::
Een taak job)-bestand opslaan (saven)
Het opslaan van een taakbestand doe je door het toevoegen van de optie /SAVE:<jobnaam> aan het einde van uw syntaxis.
Vervang <jobname> door de naam van de taak.
De /SAVE optie maakt een bestand genaamd <jobname>.rcj in de directory waar je robocopy hebt uitgevoerd.
robocopy C:\bron C:\bestemming /SAVE:myjob |
Je moet /SAVE specificeren als laatste optie.
Alle opties die na /SAVE worden opgegeven zullen niet aan het taak bestand worden toegevoegd.
Merk ook op dat zelfs als een bestaand taak bestand al bestaat, robocopy altijd het bestaande bestand zal overschrijven.
Maak een backup of versiebeheer van je taakbestanden!
Opmerking: Als je probeert om de /MT optie te gebruiken bij het opslaan naar een taakbestand,
zal deze niet in het taakbestand staan. Schijnt te kunnen maar is nog onbekend hoe.
Een taak(job)-bestand gebruiken (using)
Zodra een taak is opgeslagen in een taakbestand, kunt u de //JOB:<jobnaam> optie gebruiken om het taakbestand te specificeren om uit te lezen.
Robocopy leest alle parameters in het taakbestand. Het voert dan uit alsof je de opties direct op de commandoregel hebt opgegeven.
Een taak(job)-bestand maken zonder een taak uit te voeren met /QUIT
Het doel van de /QUIT optie is niet duidelijk.
Oppervlakkig gezien zou je kunnen denken dat /QUIT een draaiende opdracht dwingt om af te sluiten.
In plaats daarvan werkt /QUIT meer als een optie om te voorkomen dat een opdracht überhaupt wordt uitgevoerd.
Officieel, dwingt de /QUIT optie "robocopy om de verwerking van de opdrachtregel te beëindigen".
Het zou echter beter uitgelegd kunnen worden als het creëren van een opdracht bestand zonder een opdracht uit te voeren.
Als je de /SAVE optie gebruikt, wordt de opdracht ook automatisch uitgevoerd.
Er is geen manier om een jobbestand te maken zonder eerst de job uit te voeren.
Je kan het RCJ job bestand maken met een tekst editor of je kan robocopy gebruiken om dit te doen door /QUIT toe te voegen aan het einde.
robocopy C:\bron C:\bestemming /SAVE:myjob /QUIT |
Een taak(job)-bestand editen
Omdat taak bestanden gewoon tekst (kale ascii) bestanden zijn, kun je ze bewerken met je favoriete tekst editor of je kunt robocopy dit voor je laten doen.
Je kunt taak bestanden bewerken met een combinatie van /JOB, /SAVE en /QUIT.
Bijvoorbeeld, misschien wil je alle EXE bestanden uitsluiten van je robocopy taak, opgeslagen in een taak bestand genaamd backupfiles.rcj.
Je hebt het bestand al gemaakt en wilt niet alles overschrijven. Je kunt de nieuwe optie toevoegen zoals hieronder:
robocopy /JOB:backupfiles /XF *.EXE /SAVE:backupfiles /QUIT |
Meerdere taakbestanden gebruiken
U kunt zelfs het gebruik van taakbestanden combineren.
Wanneer u meerdere taakbestanden in dezelfde run opgeeft, worden alle opties die in die run worden gebruikt, samengevoegd.
Bijvoorbeeld, misschien hebt u een grote lijst met bestanden die u wilt uitsluiten van uw backupfiles kopieeropdracht.
Open een teksteditor en voeg het volgende toe om een exclude.rcj bestand te maken.
U kunt dan deze bestanden uitsluiten van de backupfiles job als volgt:
robocopy /JOB:backupfiles /JOB:exclude |
Aangezien het originele backupfiles job bestand al alle EXE bestanden uitsloot, zou de syntax van de bovenstaande run er uitzien als /XF *.exe a.exe b.txt c.cer.
Robocopy combineert alle opties in één.
Robokopie sjablonen en het gebruik van de /NOSD en /NODD opties
Nog niet vertaald.
Asynchroon kopiëren
Standaard verwerkt robocopy slechts één bestand per keer.
Je kunt robocopy echter forceren om meer bestanden dan tegelijk te kopiëren door de /MT optie te gebruiken.
De /MT optie staat je toe om het aantal threads op te geven dat robocopy zal gebruiken om bestanden te kopiëren.
Het maximum is 128.
Je kunt /MT als volgt gebruiken:
robocopy C:\bron C:\bestemming /MT:32 |
De waarde 32 is in dit geval gekozen als basis.
Die waarde is om te zien hoe je computer en netwerk met dingen omgaan en de threads daarop zal aanpassen.
Merk op dat als u /MT gebruikt, u niet in staat zult zijn om /IPG
of /EFSRAW te gebruiken.
Voor betere prestaties moet u de log niet naar de console sturen. Gebruik in plaats daarvan /LOG.
Robocopy starten op een aangegeven tijd (scheduling)
Robocopy heeft een paar manieren waarop je kunt plannen wanneer het draait.
Het gebruik van /RH
Met de /RH optie, kun je robocopy vertellen dat het alleen op een bepaalde tijd moet draaien.
Dit is handig als je een onderhoud venster hebt of een tijd wanneer iedereen naar huis is gegaan voor de dag.
Je kunt een starttijd en een eindtijd opgeven in het formaat HHMM-HHMM.
Bijvoorbeeld, om robocopy aan te roepen maar alleen te laten draaien tussen 5PM en 9AM zoals gedefinieerd door de systeemklok, voer uit:
robocopy C:\bron C:\bestemming /RH:1700-0900 |
Je zult zien dat als je robocopy buiten deze uren aanroept, het je de huidige tijd vertelt en wacht op de start tijd om uit te voeren.
U moet ervoor zorgen dat beide tijden in een 24-uurs formaat staan en precies vier cijfers lang zijn. Het venster moet groter zijn dan twee minuten.
Standaard zal het gebruik van /RH de starttijd controleren voor de hele run.
Echter, als je veel bestanden hebt en denkt dat het proces langer kan duren dan dat, dan kun je de /PF optie gebruiken.
/PF zal robocopy dwingen om het venster voor ieder bestand te controleren.
De uitvoer log
Robocopy produceert altijd een uitvoer log.
Of die log via stdout op het scherm wordt getoont en/of naar een log file wordt gestuurd is geheel aan jou.
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/NP | No progress. Suppresses the display of progress information. This can be useful when output is redirected to a file | |
/unicode | Display the status output as unicode text | |
/LOG:file | Output status to log file and overwrite | |
/UNILOG:file | Output status to unicode log file and overwrite | |
/LOG+:file | Output status to log file and append to existing log file | |
/UNILOG+:file | Output status to unicode log file and append to existing log file | |
/TS | Displays the file timestamps for every file processed | |
/FP | Replaces simple file names with full file pathnames in the output | |
/NS | Does not show file sizes | |
/NC | Hides output the file class “Text Tags” (Go here for more information: https://www.uvm.edu/~gcd/2015/04/robocopy-file-classes/) | |
/NFL | Hides file names. Failures are still logged though. Any files files deleted or would be deleted if /L was omitted are always logged | |
/NDL | Hides output of the directory listing. Full file pathnames are output to more easily track down problematic files. | |
/TEE | Output to console window, as well as the log file | |
/NJH | No job header | |
/NJS | No job summary | |
/BYTES | Print sizes as bytes | |
/X | Report all files, not just those selected & copied | |
/V | Produce verbose output log, showing skipped files | |
/ETA | Show estimated time of arrival of copied files. See the start time of each file copy and the estimated time of completion based on the observed throughput of previous copies. Times are displayed after the file name in the format HH:MM – > HH:MM (start – > finish). | |
/DEBUG | Show debug volume information | |
De onderdelen in de log file beperken met /NJS en /NJH
Standaard (default) geeft robocopy twee elementen in zijn uitvoer, een opdrachtkop en een opdrachtsamenvatting.
De koptekst van de opdracht is de eenvoudige ROBOCOPY koptekst aan de bovenkant.
Het opdrachtoverzicht toont een samenvattende status van alle bestanden/mappen, hoeveel gegevens zijn overgedragen en de tijd waarop de opdracht is beëindigd.
U kunt elk van deze elementen verbergen met de /NJH optie om de taakkop te verbergen en de /NJS optie om het taakoverzicht te verbergen.
U kunt een van deze opties of beide opties samen gebruiken.
Uitvoerlog naar een bestand doorsturen
Als u de uitvoerlog moet opslaan, kunt u het omleiden naar een tekstbestand en/of het weergeven op de console.
Het kan natuurlijk met de traditionele uitvoeromleidingen zoals >, >>, maar er is een speciale optie /LOG.
Om het uitvoerlogbestand om te leiden naar een bestand met de /LOG optie, waarbij een bestaand logbestand wordt overschreven,
gebruik je de syntax /LOG: zoals hieronder. De enige uitvoer die je zal krijgen op de console is het pad naar het logbestand.
Voorbeeld:
opdracht: | robocopy C:\bron C:\bestemmingt /LOG:c:\file.log |
output: | Log bestand : c:\file.log |
|
Toevoegen aan het log bestand
Als je de inhoud van een bestaand logbestand wilt behouden en de resultaten wilt toevoegen aan een bestand, dan kun je de + operator gebruiken zoals hieronder aangegeven.
Voorbeeld:
opdracht: | robocopy C:\bron C:\bestemming /LOG+:c:\file.log |
output: | Log bestand : c:\file.log |
|
Toevoegen aan het log bestand EN weergeven op het scherm
Als je de uitvoer log wilt opslaan in een bestand maar ook wilt zien op de console, dan kun je de /TEE optie gebruiken. Deze optie zorgt ervoor dat robocopy de uitvoer naar het log bestand schrijft, terwijl het standaard gedrag van uitvoer terug naar de console gehandhaafd blijft.
Voorbeeld:
robocopy C:\src C:\dst /LOG+:c:\file.log /TEE |
Exit codes
Net als alle andere commando regel programma's, geeft robocopy exit codes terug, afhankelijk van de resultaten van de uitvoering.
We zouden allemaal graag willen dat robocopy altijd succesvol afsluit met een 0, maar dat gebeurt niet altijd.
Hieronder vind je alle exit codes die robocopy retourneert en hun uitleg.
Elke exit code groter dan zeven geeft aan dat er tenminste een fout is opgetreden tijdens de uitvoering.
Exit code | Uitleg |
0 | geen actie uitgevoerd. Bron en bestemming zijn gesynchroniseerd |
1 | tenminste één bestand is succesvol gekopieerd |
2 | er zijn extra bestanden of mappen gedetecteerd. Bekijk het logboek |
3 | afsluitingscodes 2 en 1 gecombineerd |
4 | onverenigbare bestanden of directories gevonden. Bekijk het logboek |
5 | afsluitcodes 4 en 1 gecombineerd |
6 | afsluitcodes 4 en 2 gecombineerd |
7 | combinatie van de afritcodes 4, 1 en 2 |
8 | ten minste één bestand of map kon niet worden gekopieerd. Retry-limiet overschreden. Bekijk het logboek |
16 | kopiëren is rampzalig mislukt |
Merk op dat als je robocopy uitvoert in een hulpprogramma van een derde partij, dat hulpprogramma kan denken dat elke exit code
die niet nul is een fout is. Om dit te voorkomen, kun je de exit code veranderen in 0 als het een 1 retourneert.
De Robocopy "extra" bestand exit code is een veel voorkomende return code die betekent dat een "extra" bestand in de doelmap zit
maar niet in de bronmap. Deze code sluit extra's uit die het verwijderen van bestanden uit de doelmap verhinderen.
Veranderen van de exit code in een Batch bestand
Als je robocopy uitvoert met een batch bestand, dan kun je de waarde van de %ERRORLEVEL% variabele vinden.
Als deze 1 teruggeeft, gebruik dan het exit sleutelwoord om het script af te sluiten met 0.
(robocopy ) ^& IF %ERRORLEVEL% LEQ 1 exit 0 |
Veranderen van de exit code in een PowerShell script
Als je robocopy uitvoert in een PowerShell script, kun je robocopy aanroepen met Start-Process met PassThru om het aangemaakte proces
te retourneren en Wait om te wachten tot robocopy klaar is. Je kan dan de ExitCode property controleren op een waarde van 1.
Als de exit code 1 is dan sluit je het PowerShell script af met een 0 door gebruik te maken van $host.SetShouldExit().
Voorbeeld:
$exitCode = (Start-Process -FilePath 'robocopy' -ArgumentList '<option>' -PassThru -Wait).ExitCode |
indien ($exitCode -eq 1) { |
$host.SetShouldExit(0) |
|
Gebruikelijke fouten
Als je met duizenden bestanden te maken hebt, kom je vast en zeker problemen tegen.
Hier is een overzicht van veel voorkomende fouten.
Error Invalid Parameter
Wanneer je een fout ziet met de melding error invalid parameter, betekent dit normaal gesproken dat je hebt geprobeerd om opties
door te geven aan robocopy op een of andere manier buiten de volgorde.
De robocopy invalid parameter 3 fout is de meest voorkomende, lijkt het.
Een veel voorkomende reden dat je deze fout krijgt is als je een bron of doel map met spaties opgeeft en vergeet om deze te omringen
met aanhalingstekens.
Robocopy voorbeelden
Het leven is te kort om alle fouten zelf te maken. Profiteer van de ervaringen van anderen.
Één (1) file kopiëren:
robocopy c:\bron d:\bestemming copythisfile.txt |
Kopieer alle files (behalve subdirectories) van C:\bron naar C:\bestemming:
robocopy c:\bron d:\bestemming |
Kopieer alles, inclusief subdirectories (leeg of niet leeg) en NTFS permissies.:
robocopy C:\bron C:\bestemming /E /COPYALL |
Files verplaatsen (move); de files worden dus gedelete op de bron:
robocopy C:\bron C:\bestemming /MOVE |
Twee directories spiegelen (synchroniseren, mirroren)
op C:\bestemming komen dezelfde files te staan als op C:\bron.
robocopy C:\bron C:\bestemming /MIR |
Twee directories spiegelen (synchroniseren, mirroren)
op C:\bestemming komen dezelfde files te staan als op C:\bron
en
verwijdert alle bestanden en directories (leeg of niet) op de bestemming die niet meer aanwezig zijn in de bron.
robocopy C:\bron C:\bestemming /MIR /PURGE /E |
Zoek de map grootte van een netwerk map:
robocopy "\MACHINE\fileshare" c:\dummy /l /xj /e /nfl /ndl /njh /r:0 /mt:64 |
Mapinhoud snel verwijderen (rechten op submappen negerend)
robocopy c:\dummy c:\foldertodelete /MIR |
Mijn wekelijkse backup op Windows is o.a. een 1-op-1 kopie van al mijn data naar een subdirectory-op-datum op een externe schijf |
Mijn dagelijkse backup (soms ieder uur) doe ik met de hieronder staande robocopy batch-opdracht. |
robocopy c:\bron d:\bestemming /S /E /COPY:DAT /PURGE /MIR /R:10 /W:20 /LOG+:c:\bron\file.log |
/S | inclusief subdirectories |
/E | inclusief lege subdirectories |
/COPY:DAT | alle files (met Datums, Attributes en Timestamps) |
/PURGE | verwijder bestanden/directories op de bestemming die niet meer aanwezig zijn in de bron |
/MIR | spiegel (sync, mirror) de directory tree |
/R:10 | aantal herhalingen bij mislukte acties |
/W:20 | wachttijd in seconden tussen herhalingen |
/LOG+ | vul de log file aan |
Migraties van grote bestanden uitvoeren
Nog niet vertaald.
Wat robocopy NIET kan
Robocopy kan niet in één opdracht meerdere bron-directories en/of meerdere bestemmings-directories kopiëren.
Na ja, het kan wel maar via een omweg.
Robocopy in een GUI (Graphical User Interface)
- EasyRoboCopy
- ChoEazyCopy
- Robocop
- WinRoboCopy
- RoboMirror
Robocopy alternatieven
Robocopy is fantastisch gereedschap, maar er zijn (zeker anno 2022) vele alternatieven.
- xxcopy (link), is de third-party uitbreiding van xcopy, een vergelijlbaar command-line programma met vele opties
- Copy-Item PowerShell cmdlet (wiki nl wiki en), lang niet zo veel mogelijkheden als robocopy, wel veel eenvoudiger
-
SyncToy wiki, OEM Windows (ook W-10), doet hetzelfde als Robocopy,
maar met een grafische schil. Heerlijk 'down-to-earth' en vooral een overzichtelijk, user-friendly programma.
De laatste update is uit 2021.
- een willekeurige greep uit de modernere GUI programma's (er zijn er veel meer):
- Acronis, Aomei Backupper, EaseUS Todo Backup, Fbackup, FreeFileSync (RealTimeSync), Paragon Backup and Recovery, Syncthing, SyncBackFree
| |
Samenvatting
Robocopy is een voortreffelijk gereedschap om om grote datasets te kopiëren.
Elke IT'er zou het moeten kennen en kunnen.
Of je nu data wilt migreren, of folders wilt spiegelen, of een snelle eenvoudige manier zoekt om files te kopierën,
robocopy is a voortreffelijke keuze voor degene die om kan gaan met command-line opdrachten.
Het wordt, anno 2022, nog steeds uitgebreid met nieuwe functies, zelfs in Windows 11.
|