Robocopy-opdrachten: Gegevensmigratie, Map Synchronisatie en Meer

Robocopy is een van de meest gebruikte command-line hulpprogramma’s om grote hoeveelheden gegevens in Windows te kopiëren. Het is zo’n populair hulpprogramma vanwege de kracht ervan. Maar met al die kracht komt complexiteit. In deze handleiding zullen we al die complexiteit uiteenzetten en een volledige tutorial bieden over het gebruik van dit nuttige hulpprogramma.

Robocopy is een Windows command-line hulpprogramma dat beschikbaar is sinds Windows NT. Het is een vervanging voor het minder veelzijdige xcopy-hulpprogramma. Hiermee kunt u een schijfpad of serverpad opgeven om bestanden opdrachtregelsgewijs te kopiëren/verplaatsen.

De versie van Robocopy op het moment van schrijven is 10.0.18. Dit is de versie waarop ik mijn tests heb uitgevoerd.

Robocopy biedt een scala aan functies die u kunt benutten om efficiënte en snelle bestandskopiëen en verplaatsingen uit te voeren. Het kan:

  • Bestanden over een netwerk kopiëren met hervattingsmogelijkheden
  • Kan NTFS-junction-punten overslaan die normaal gesproken falen door oneindige lussen
  • Kan bestands- en mapattributen kopiëren met behoud van tijdstempels
  • Kan NTFS-rechten, eigenaarschap en auditinformatie kopiëren
  • Kan map-tijdstempels kopiëren
  • Kan bestanden kopiëren in ‘back-up’ modus om ervoor te zorgen dat bestanden worden gekopieerd, zelfs als de rechten zijn ontzegd aan de beheerder
  • Automatische herhalingen
  • Kan twee mappen synchroniseren
  • Is slim genoeg om bestanden over te slaan die al zijn gekopieerd
  • Kan paden kopiëren die groter zijn dan de limiet van 256 tekens
  • Voert asynchrone kopiëen uit met behulp van zijn multithreading-mogelijkheden.
  • Levert gestandaardiseerde exitcodes voor gebruik in scripts

Zoals je kunt zien, is er veel te kopiëren. Ik wilde alles behandelen wat je moet weten over deze handige tool.

Gemeenschappelijke Robocopy Syntax Referentie

Waarom zo’n lange blogpost over één enkele utility? Kijk maar eens naar de tabellen hieronder. Je hebt veel opties om bestanden te kopiëren of te verplaatsen met robocopy! Je zal meer opties zien in de individuele secties.

Deze tabellen zijn opgebouwd uit de hulpsyntax die is teruggestuurd van robocopy /?. Ze zijn opgesplitst in meer betekenisvolle secties, in de loop van de tijd toegevoegd, en opgeschoond om nuttigere informatie te geven.

Bron Opties

Switch Explanation Default Behavior Equivalent Switch Notes
/S Copy subfolders
/E Copy subfolders including empty subfolders
/COPY:[DATSOU] Copy options /COPY:DAT D=Data, A=Attributes, T=Timestamps S=Security=NTFS ACLs, O=Owner info, U=aUditing info. File Data (D) always includes file Timestamps (T)
/SEC Copy files with SECurity /COPY:DATS
/DCOPY:T Copy directory timestamps
/COPYALL Copy ALL file 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. CREDIT: Monsieurx (Reddit)
/NOCOPY Copy NO file info useful with /PURGE
/A Copy only files with the Archive attribute set
/M like /A, but remove Archive attribute from source files
/LEV:n Only copy the top n LEVels of the source tree
/MAXAGE:n MAXimum file AGE – exclude files older than n days/date
/MINAGE:n MINimum file AGE – exclude files newer than 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

Bestemming Opties

Switch Explanation Default Behavior Equivalent Switch Notes
/A+:[RASHCNET] Set file attribute(s) on destination files + add
/A-:[RASHCNET] Remove file attribute(s) on destination files
/FAT Create destination files using 8.3 FAT file names only
/CREATE Create directory tree structure + zero-length files only
/DST Compensate for one-hour DST time differences

Kopieer Opties

Switch Explanation Default Behavior Equivalent Switch Notes
/L List files only Don’t copy, timestamp or delete any files
/MOV Move files Delete from source after copying
/MOVE Move files and directories Delete from source after copying
/sl Copy file symbolic links instead of the target
/Z Copy files in restartable mode Survive a network glitch
/B Copy files in backup mode
/J Copy using unbuffered I/O Recommended for large files
/NOOFFLOAD Copy files without using the Windows copy offload mechanism https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831628(v=ws.11)
/EFSRAW Copy any encrypted files using EFS RAW mode
/TIMFIX Fix file times on all files, even skipped files
/XO Exclude older if destination file exists and is the same date or newer than the source – don’t bother to overwrite it.
/XC Exclude changed files
/XN Exclude newer files
/XX Exclude files present in destination but not source /XX
/XF file [file]… Exclude files matching given names/paths/wildcards
/XD dirs [dirs]… Exclude directories matching given names/paths. /XF and /XD can be used in combination e.g. ROBOCOPY c:\source d:\dest /XF *.doc *.xls /XD c:\unwanted /S
/IA:[RASHCNETO] Include files with any of the given attributes
/XA:[RASHCNETO] Exclude files with any of the given attributes
/IM Overwrite modified files. This includes the same files with different times.
/IS Overwrite files even if they are already the same
/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 Exclude files bigger than n bytes
/MIN:n Exclude files smaller than n bytes
/MAXLAD:n Exclude files unused since n
/MINLAD:n Exclude files used since n If n < 1900 then n = n days, else n = YYYYMMDD date
/MIR Mirror a directory tree /PURGE /E
/PURGE Delete dest files/folders that no longer exist in source
/XL Exclude files present in source but not destination
/SECFIX Robocopy /secfix fixes file security on all files, even skipped 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 Use restartable mode; if access denied use Backup mode

Bewakings Opties

Switch Explanation Default Behavior Equivalent Switch Notes
/R:n Number of retries on failed copies /R:1000000 Always try to set this option. I recommend setting this to 10-20 to not waste time retrying.
/W:n Wait time between retries /W:30 Always try to set this option to a lower number to retry more quickly. I suggest 5-10.
/REG Save /R:n and /W:n in the Windows registry as default settings
/RH:hhmm-hhmm times when new copies can be started
/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

Begrijpen van Robocopy Gedrag

I’ve now completely blew your mind with all of the potential syntax options available to you. Let’s now see all of the different combinations of how we can use this syntax.

I could provide you an enormously long list of robocopy commands with an ever-growing number of switches. But I think it’s better to teach you how to fish. Let’s go over how to put sense out of all of these options.

Robocopy Kopieert Alleen Volledige Directories

Elke robocopy uitvoering zal een bron en een bestemming directory hebben. Robocopy kopieert en verplaatst bestanden per volledige directory. Het is niet mogelijk om expliciet een enkel bestand te kopiëren met robocopy. Gebruik copy of PowerShell’s Copy-Item hiervoor.

Echter, je kan met robocopy een enkel bestand kopiëren met het juiste filter, wat je hieronder zult leren. Om een enkel bestand te kopiëren met robocopy, geef je de bron- en bestemmingsdirectories op, direct gevolgd door de bestandsnaam in de bron.

> robocopy c:\src d:\dst copythisfile.txt

Syntax Hangt af van de Omgeving

Ook zullen de opties die je aan robocopy geeft, afhangen van de omgeving. Je zult een paar vragen moeten beantwoorden om erachter te komen welke opties je moet gebruiken.

  • Zal je altijd naar een lege directory kopiëren?
  • Is het mogelijk dat er al bestanden bestaan in de doelmap?
  • Gaat u terabytes aan gegevens kopiëren of slechts enkele megabytes?
  • Gaat u bestanden kopiëren via een netwerk of lokaal?
  • … en meer.

Als er geen bestanden in de doelmap staan, hoeft u zich geen zorgen te maken over opties die bestanden overschrijven. Als u geen bestanden via het netwerk gaat kopiëren, maakt u zich geen zorgen over die opties. Definieer expliciet uw huidige en mogelijke toekomstige omstandigheden waarin uw omgeving zich zal bevinden.

Herken Standaardopties

Robocopy gebruikt standaard veel opties. U kunt ze selecteren door naar de bovenstaande tabellen te kijken. Het biedt ook handige uitvoer telkens wanneer u het hulpprogramma uitvoert.

U kunt hieronder zien dat toen ik robocopy uitvoerde met zijn meest basale opties (de bron- en doelmap), het automatisch enkele opties gebruikte. Het begrijpen van het standaardgedrag is belangrijk.

Verwijs naar de opties die u ziet in de uitvoer met de bovenstaande optieverklaringen en u zult precies begrijpen wat robocopy onder de motorkap doet.

Default robocopy options

Begrijpen Wat Robocopy-opdrachten Kunnen Doen

Als u de opdrachten copy of Copy-Item van PowerShell hebt gebruikt, hebt u waarschijnlijk een bron en bestemming gespecificeerd en ging u verder met uw dag. Daar zijn niet veel opties die u daar kunt configureren. Deze robocopy-opdrachten hebben een standaardgedrag.

Maar robocopy daarentegen begrijpt veel meer en geeft u de flexibiliteit om het gedrag zoveel aan te passen als u wilt.

Het is belangrijk om te weten dat robocopy niet alleen op de hoogte is van het concept van een bestand of map. Er is veel meer aan een bestandssysteem dan dat en robocopy ondersteunt vrijwel alles.

A file sitting on a filesystem isn’t just a dumb object with a single purpose. There are many different attributes and things that go with the concept of a file. For example, a file has attributes such as:

  • a timestamp (written, modified and accessed)
  • NTFS ACL
  • een eigenaar
  • NTFS-auditgegevens
  • verborgen vlag
  • gearchiveerde vlag

Wanneer je een bestand kopieert of verplaatst, heb je de mogelijkheid om al die informatie mee te nemen, als je dat wilt.

Begrijp dat wanneer je robocopy uitvoert, je niet alleen een bestand kopieert, maar ook potentieel alle andere informatie ermee kopieert. Het is belangrijk om dat te realiseren en er rekening mee te houden in de opties die je aan robocopy geeft.

De basis: Uitvoeren van ‘WhatIf’-scenario’s

Als je ergens een enorme bestandsserver hebt die je wilt migreren en nog geen actie wilt ondernemen, kun je robocopy gebruiken om te tonen wat het zou hebben gedaan.

Met de /L-optie kun je robocopy vertellen om alle opgegeven bestanden en/of mappen op te sommen en een lijst terug te geven van bestanden die het zou hebben gekopieerd/verplaatst.

Je kunt de /L-optie met elke andere optie gebruiken. Dit is een uitstekende manier om alle opties te tonen die robocopy zou hebben gebruikt (standaard of niet). Het geeft je een algeheel beeld van wat robocopy zal doen met de opgegeven opties.

Using /L

De basis: Bestanden kopiëren

Het meest basale gebruik van robocopy is het gebruik van een bron- en doelmap zonder opties.

> robocopy C:\src C:\dst

Deze optie zal alle bestanden (exclusief submappen) kopiëren van C:\src naar C:\dst.

U kunt ook alles kopiëren, inclusief submappen (leeg of niet) en NTFS-permissies. Dit is, voor zover ik kan zien, de methode om letterlijk alles wat er over een map met bestanden te kopiëren naar een andere map.

Hieronder kopieer ik alle NTFS ACL’s, bestandseigenaren, submappen (inclusief de lege) en alle bestandsattributen. Dit alles is mogelijk met slechts de /E optie om alle lege submappen te includeren en /COPYALL om de rest te vangen.

> robocopy C:\src C:\dst /E /COPYALL

De Basis: Bestanden Verplaatsen

Het verplaatsen van bestanden transfereert bestanden van de ene map naar de andere, net zoals bij kopiëren. Het enige verschil met een verplaatsingsoperatie is dat de bronbestanden worden verwijderd na de kopie.

Om bestanden/mappen uit de bron te verwijderen na het kopiëren, gebruik de /MOV optie. Dit zal alle bestanden in de opgegeven map verwijderen (geen submappen).

> robocopy C:\src C:\dst /MOV

U kunt ook /MOVE gebruiken om alle bestanden en submappen te verplaatsen.

> robocopy C:\src C:\dst /MOVE

De Basis: Bestanden Synchroniseren

Robocopy stelt u in staat om twee mappen te synchroniseren. Dit betekent het zorgen dat alle bestanden in de bestemmingsmap zich in de bronmap bevinden en niet meer. /MIR zal data repliceren door alle bestanden in de bron te kopiëren die niet in de bestemming zijn en bestanden in de bestemming te verwijderen die niet in de bron zijn. Wees voorzichtig!

> robocopy C:\src C:\dst /MIR

Bestanden Over Een Netwerk Kopiëren

Als u bestanden over een netwerk kopieert, zijn er een paar opties die u zou moeten overwegen.

Robocopy stelt u in staat om bestanden te kopiëren in ‘herstartbare modus’ met behulp van de optie /Z. Dit betekent dat als een bestand begint te kopiëren en halverwege mislukt, de kopie opnieuw kan beginnen in plaats van volledig te mislukken. De /Z optie is handig wanneer de verbinding wordt verbroken via een netwerk.

Waarschuwing: Sommigen hebben gemeld dat het gebruik van /Z de prestaties met 1/4 vermindert. Laat me weten wat uw bevindingen zijn.

U kunt ook de /FFT optie gebruiken. Deze schakelaar staat erom bekend bestandstijdstempels nauwkeuriger te behouden bij overdracht via een netwerk. Deze optie gebruikt tijdstempels van het FAT-bestandssysteem in plaats van NTFS.

robocopy C:\src \\SRV1\share /Z /FFT

Het gebruik van /IPG om de inter-pakketkloof te regelen

Bij het kopiëren van bestanden via een netwerk, kunt u de /IPG schakelaar gebruiken. Dit staat ook bekend als de optie voor inter-pakketkloof. Met deze optie wordt (in milliseconden) de frequentie gedefinieerd waarmee robocopy zal wachten tussen het verzenden van nieuwe pakketten.

Gebruik altijd UNC-paden en geen stationsletters

A reader on Reddit discovered the hard way to not use mapped drives as a destination directory. Instead, always use always use a UNC path. You might run into issues with the 256-character limit if you do. Check out this Microsoft doc for more information.

Robocopy-back-upmodus (Robocopy /Z)

Robocopy heeft een optie (/B) of als back-up voor de herstartbare modus (/ZB) die bestanden kopieert in back-upmodus. Wat is “back-upmodus” eigenlijk?

Wanneer u normaal gesproken een bestand kopieert in Windows en u een bestand tegenkomt dat administratieve rechten vereist om toegang te krijgen, ontvangt u een foutmelding waarin staat dat u geen toestemming hebt. Ook al draait u als lokale beheerder, Windows staat u niet toe er toegang toe te krijgen.

WAARSCHUWING: Er zijn meldingen geweest van beschadigde servervolumes bij het kopiëren van gegevens naar een Windows Server 2016-server met ingeschakelde deduplicatie. Wanneer u de /ZB-schakelaar gebruikt, zal het resultaat een beschadigde deduplicatiechunkopslag zijn in de System Volume Information. De gekopieerde bestanden zullen niet leesbaar zijn en fouten genereren bij pogingen om ze te manipuleren. Serverfault-link met meer informatie.

Back-upmodus is een manier om toegang te krijgen tot bestanden zonder u zorgen te hoeven maken over machtigingen.

Robocopy gebruikt de back-upmodus om de SeBackupPrivilege te gebruiken voor het lezen van bestanden en het gebruikersrecht SeRestorePrivilege om toegang te krijgen tot alle benodigde bestanden. Hiermee worden alle ACE’s genegeerd die u normaal gesproken zouden verhinderen toegang te krijgen tot die bestanden.

De gebruikersrechten SeBackupPrivilege en SeRestorePrivilege worden normaal toegewezen aan gebruikers in de groepen Backup Operators en Administrators, maar soms kunnen ze worden verwijderd. De back-upmodule elimineert dat risico en verleent tijdelijk de rechten aan de gebruiker die robocopy uitvoert.

Als u wilt controleren of uw gebruikersaccount dat recht heeft, kunt u whoami /priv uitvoeren en beide rechten zouden moeten worden weergegeven.

Filteren van bestanden en mappen

Het grootste deel van de beschikbare opties stelt u in staat bestanden en mappen op vele verschillende manieren uit te sluiten. Ik heb alle manieren waarop u bestanden en mappen kunt filteren of uitsluiten op basis van verschillende criteria uitgelegd.

Op Bestandsnaam of Bestandsextensie

Het filteren van welke bestanden worden gekopieerd/verplaatst in een robocopy-oproep wordt gedaan met behulp van wildcards. U kunt een wildcard gebruiken om te filteren op bestanden die overeenkomen met een specifieke bestandsnaamstring of extensie.

Bijvoorbeeld, om alleen TXT-bestanden te kopiëren, kunt u *.txt specificeren.

> robocopy C:\src C:\dst *.txt

Als u zich wilt beperken tot alleen bestanden die beginnen met a, kunt u a* gebruiken.

> robocopy C:\src C:\dst a*

U kunt ook meerdere sets bestandsnamen opgeven door ze te scheiden met een spatie zoals hieronder getoond.

> robocopy C:\src C:\dst a* b*

Wanneer u filtert op bestandsnaam, toont robocopy u het filter in de uitvoer.

FIltering files output

Op Mapnaam

Robocopy stelt u in staat items te filteren niet alleen op bestandsnaam, maar ook op mapnaam. Met behulp van robocopy /xd kunt u bepaalde mappen uitsluiten die overeenkomen met een specifieke naam.

Bij het kopiëren van meerdere mappen, gebruikt u de /XD-schakelaar om mappen uit te sluiten van de uitvoering.

> robocopy C:\src C:\dst /XD "c:\src\exclude"

Op Bestands-/Maptijdstempel

Hieronder vindt u alle robocopy-opties die bestanden en mappen uitsluiten op basis van verschillende tijdstempelkenmerken.

Switch Explanation
/DCOPY:T Copy directory timestamps
/MAXAGE:n Exclude files older than n days/date
/MINAGE:n Exclude files newer than n days/date
/XO If destination file exists and is the same date or newer than the source, don’t overwrite
/XN If destination file exists and is the same date or older than the source, don’t overwrite

Er zijn twee populaire opties om te kiezen bij het filteren op zaken als tijdstempel; /XO en /MAXAGE.

/XO stelt u in staat bestanden uit te sluiten van kopiëren alleen als ze nieuwer zijn dan de bron. Door de /XO-optie te gebruiken, kunt u met robocopy alleen nieuwe bestanden kopiëren op basis van de toegangsdatum.

> robocopy C:\src C:\dsc /XO

Als u de maximale leeftijd van bestanden kent, kunt u ook de /MAXAGE-optie gebruiken. Hiermee kunt u in het formaat YYYMMDD specificeren tot welke oudere datum een bestand kan hebben voordat het wordt gekopieerd.

> robocopy c:\src c:\dst /S /MAXAGE:20191001

Robocopy-taken

U hebt gezien dat tientallen opties tot uw beschikking staan. Het is gemakkelijk voor deze opties om al snel onhandelbaar te worden. Gelukkig hebt u een betere optie dan het memoriseren en ervoor zorgen dat al deze opties elke keer perfect zijn.

Robocopy-taakbestanden zijn tekstbestanden met één optie per regel. U zult meestal robocopy gebruiken om deze taakbestanden te maken. Eenmaal gemaakt, kunt u ze vervolgens wijzigen met robocopy of een eenvoudige teksteditor.

U hebt verschillende robocopy-opdrachten die werken met taken.

Switch Explanation Default Behavior Equivalent Switch Notes
/JOB:jobname Take parameters from the named job file
/SAVE:jobname Save parameters to the named job file
/QUIT Quit after processing command line Useful for viewing parameters
/NOSD No source directory is specified
/NODD No destination directory is specified
/IF Include the following files

A typical job file created with robocopy has an RCJ extension and looks like the below snippet. This job file was created by running robocopy C:\src D:\dst /save:myjob. You can see that you can provide comments in the job file using :: which is most of what this file has.

Zonder opmerkingen zou het bestand slechts éé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 :
::

Taakbestanden opslaan

Het opslaan van een taakbestand is net zo eenvoudig als het toevoegen van de /SAVE:<jobnaam>-optie aan het einde van uw syntaxis. Vervang <jobnaam> door de naam van de taak. De /SAVE-optie zal een bestand genaamd <jobnaam>.rcj aanmaken in de map waar u robocopy hebt uitgevoerd.

> robocopy C:\src C:\dst /SAVE:myjob

U moet /SAVE als laatste optie specificeren. Alle opties die na /SAVE zijn opgegeven, worden niet toegevoegd aan het taakbestand. Merk ook op dat zelfs als er al een bestaand taakbestand is, robocopy dit altijd zal overschrijven. Maak een back-up of gebruik versiebeheer voor uw taakbestanden!

Opmerking: Als u probeert de /MT-optie te gebruiken bij het opslaan in een taakbestand, zal deze niet in het taakbestand staan. Laat me weten of het u gelukt is om dit op te nemen.

Gebruik van Taakbestanden

Zodra een taak is opgeslagen in een taakbestand, kunt u vervolgens de optie /JOB:<jobnaam> gebruiken om het taakbestand aan te geven dat gelezen moet worden. Robocopy leest alle parameters in het taakbestand en voert vervolgens uit alsof u de opties rechtstreeks op de opdrachtregel hebt opgegeven.

> robocopy /JOB:myjob

Een Taakbestand Maken Zonder een Taak Uit te Voeren met /QUIT

Het doel van de /QUIT-optie is niet meteen duidelijk. Op het eerste gezicht zou u kunnen denken dat /QUIT ervoor zorgt dat een lopende taak wordt afgesloten. In plaats daarvan gedraagt /QUIT zich meer als een optie om te voorkomen dat een taak überhaupt wordt uitgevoerd.

Officieel “forceert de /QUIT-optie robocopy om het verwerken van de opdrachtregel te beëindigen”. Het zou echter beter worden uitgelegd als het maken van een taakbestand zonder een taak uit te voeren.

Als u de /SAVE-optie gebruikt, wordt de taak ook automatisch uitgevoerd. Er is geen manier om een taakbestand te maken zonder eerst de taak uit te voeren. U kunt het RCJ-taakbestand maken met een teksteditor of u kunt robocopy het laten doen door /QUIT toe te voegen aan het einde.

> robocopy C:\src C:\dst /SAVE:myjob /QUIT

Een Taakbestand Bewerken

Aangezien taakbestanden gewoon tekstbestanden zijn, kunt u ze bewerken met uw favoriete teksteditor of u kunt robocopy het voor u laten doen.

U kunt taakbestanden bewerken met behulp van een combinatie van /JOB, /SAVE en /QUIT.

Bijvoorbeeld, misschien wilt u alle EXE-bestanden uitsluiten van uw robocopy-taak die is opgeslagen in een taakbestand genaamd backupfiles.rcj. U hebt het taakbestand al gemaakt en wilt niet het hele bestand overschrijven. U kunt de nieuwe optie toevoegen zoals hieronder:

> robocopy /JOB:backupfiles /XF *.EXE /SAVE:backupfiles /QUIT

Het gebruik van meerdere taakbestanden

Je kunt zelfs het gebruik van taakbestanden combineren. Bij het specificeren van meerdere taakbestanden in dezelfde uitvoering, worden alle opties die in die uitvoering zijn gebruikt, samengevoegd.

Bijvoorbeeld, misschien heb je een grote lijst met bestanden die je wilt uitsluiten van je backupbestanden kopieertaak. Open een teksteditor en voeg het volgende toe om een exclude.rcj bestand te maken.

/XF
    a.exe
    b.txt
    c.cer

Je kunt deze bestanden dan uitsluiten van de backupbestanden taak zoals dit:

> robocopy /JOB:backupfiles /JOB:exclude

Aangezien het oorspronkelijke backupbestanden taakbestand al alle EXE-bestanden uitsloot, zou de syntaxis van de bovenstaande uitvoering eruitzien als /XF *.exe a.exe b.txt c.cer. Robocopy combineert alle opties in één.

Robocopy-sjablonen en het gebruik van de /NOSD en /NODD opties

Als je met veel taakbestanden werkt, kun je taakbestanden bouwen om parameters te accepteren. Robocopy stelt je in staat waarden van de commandoregel door te geven aan taken wanneer ze worden uitgevoerd. Een parameter is geen robocopy-term, maar past goed in deze situatie.

Je kunt robocopy-taken bouwen om parameters te accepteren door geen bron- of doelmap expliciet op te geven met behulp van de /NOSD en /NODD opties of gewoon helemaal geen bron- en doelmap op te nemen.

Als eenvoudig voorbeeld, maak een taakbestand zonder bron- of doelmap met de onderstaande syntaxis. De bedoeling van deze taak is om alle TXT- en EXE-bestanden van een bron naar een doelmap te kopiëren.

> robocopy *.txt *.exe /SAVE:backupfiles /QUIT

Op zichzelf zal deze taak nooit werken omdat er geen bron- of doelmap is gespecificeerd.

Wanneer je een taak aanmaakt zonder bron- en doelmap, wordt het taakbestand automatisch aangemaakt met behulp van de opties /NOSD en /NODD.

/NOSD           
/NODD
/IF
    *.txt
    *.exe
/DCOPY:DA
/COPY:DAT
/R:1000000
/W:30

De /NOSD-optie vertelt robocopy dat je geen bronmap hebt opgenomen, terwijl /NODD aangeeft dat je geen doelmap hebt opgenomen. Dit taakbestand is een “sjabloon” voor andere taken.

Maar je kunt “parameters” doorgeven aan dit taakbestand om de bron- en doelmap op te geven.

Om het zojuist aangemaakte taakbestand te gebruiken om bestanden te kopiëren van C:\src naar C:\dst, kun je deze mappen rechtstreeks doorgeven via de opdrachtregel, die dan aan de taak zal worden doorgegeven.

> robocopy /JOB:backupfiles C:\src C:\dst

Asynchrone Kopie (Robocopy /MT)

Standaard verwerkt robocopy slechts één bestand tegelijk. Je kunt echter robocopy dwingen om meer bestanden tegelijk te kopiëren door de /MT-optie te gebruiken.

De /MT-optie maakt het mogelijk 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:\src C:\dst /MT:32

I’ve chosen 32 in this case as a baseline. I suggest starting at 32 to see how your computer and network handle things and adjust the threads accordingly.

Houd er rekening mee dat als je /MT gebruikt, je geen /IPG of /EFSRAW kunt gebruiken. Voor betere prestaties, geef de log niet weer op de console. Gebruik in plaats daarvan /LOG.

Planning van Robocopy

Robocopy heeft verschillende manieren waarop je kunt plannen wanneer het wordt uitgevoerd.

Gebruik van /RH

Met de optie /RH kunt u robocopy vertellen alleen te draaien tijdens een specifieke tijd. Dit is geweldig als u een onderhoudsvenster heeft of een tijd wanneer iedereen naar huis is gegaan voor de dag.

U kunt een starttijd en een eindtijd specificeren in het formaat HHMM-HHMM. Bijvoorbeeld, om robocopy aan te roepen maar het alleen toe te staan ​​om tussen 17.00 uur en 09.00 uur te draaien zoals gedefinieerd door de systeemklok, voer uit:

> robocopy C:\src C:\dst /RH:1700-0900

U zult zien dat als u robocopy buiten die uren aanroept, het u de huidige tijd zal vertellen en wachten tot de starttijd om te draaien.

Robocopy tells you what time it will start if scheduled

U moet ervoor zorgen dat beide tijden in een 24-uurs formaat zijn en precies vier cijfers lang zijn. Het venster moet langer zijn dan twee minuten.

Standaard zal het gebruik van /RH controleren op de starttijd voor de gehele uitvoering. Echter, als u veel bestanden heeft en gelooft dat het proces langer kan duren dan dat, kunt u de /PF optie gebruiken. /PF zal robocopy dwingen om het venster te controleren voor elk bestand.

Het Gebruik van de Taakplanner

Het Uitvoerlogboek

Robocopy zal altijd een uitvoerlogboek retourneren. Of dat logboek wordt weergegeven via stdout op de console en/of doorgestuurd naar een logbestand is aan u.

U heeft veel opties bij het weergeven van de uitvoer van robocopy.

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

Beperken van Logboekelementen met /NJS en /NJH

Standaard retourneert robocopy twee elementen in zijn uitvoer, een taakkop en een taakoverzicht.

De taakkop is de eenvoudige ROBOCOPY kop bovenaan.

Robocopy job header

De samenvatting van de taak toont een samenvattingsstatus van alle bestanden/mappen, hoeveel gegevens zijn overgedragen en het tijdstip waarop de uitvoering is beëindigd.

Robocopy job summary

Je kunt elk van deze elementen verbergen met de /NJH-optie om de taakkop en de /NJS-optie om de taaksamenvatting te verbergen. Je kunt een van deze opties of beide samen opnemen.

Hiding the job header and job summary

Doorsturen van uitvoerlogboek naar een bestand

Als je het uitvoerlogboek wilt opslaan, kun je het doorsturen naar een tekstbestand en/of weergeven op de console. Dit kan worden gedaan met traditionele uitvoerdoorstuurders zoals >, >>, PowerShell of de /LOG-optie.

Om het uitvoerlogboek naar een bestand door te sturen met de /LOG-optie en eventuele bestaande logbestanden te overschrijven, gebruik je de syntax /LOG:<bestandspad> zoals hieronder. Het enige dat je op de console ontvangt, is het pad naar het logbestand.

> robocopy C:\src C:\dst /LOG:c:\file.log

 Log File : c:\file.log

Als je de inhoud van een bestaand logbestand wilt behouden en resultaten aan een bestand wilt toevoegen, kun je de +-operator gebruiken zoals hieronder weergegeven.

> robocopy C:\src C:\dst /LOG+:c:\file.log

 Log File : c:\file.log

Doorsturen van uitvoerlogboek naar een bestand en weergeven op de console

Als je het uitvoerlogboek wilt opslaan naar een bestand en het ook op de console wilt zien, kun je de /TEE-optie gebruiken. Deze optie zorgt ervoor dat robocopy de uitvoer naar het logbestand schrijft terwijl het nog steeds het standaardgedrag behoudt om de uitvoer naar de console terug te sturen.

robocopy C:\src C:\dst /LOG+:c:\file.log /TEE

Exit-codes

Net als alle andere opdrachtregelhulpprogramma’s geeft robocopy exit-codes terug, afhankelijk van de resultaten van de uitvoering. We hopen allemaal dat robocopy altijd met succes wordt afgesloten met een 0, maar dat gebeurt niet altijd.

Hieronder vindt u alle uitvoercodes die robocopy retourneert en hun uitleg. Elke uitvoercode groter dan zeven geeft minstens één mislukking tijdens de uitvoering aan.

Exit Code Explanation
0 No action performed. Source and destination are synchronized.
1 At least one file was copied successfully.
2 Extra files or directories were detected. Examine log.
3 Exit codes 2 and 1 combined.
4 Mismatched files or directories found. Examine log.
5 Exit codes 4 and 1 combined.
6 Exit codes 4 and 2 combined.
7 Exit codes 4, 1 and 2 combined.
8 At least one file or directory could not be copied. Retry limit exceeeded. Examine log.
16 Copy failed catastrophically.

Merk op dat als u robocopy uitvoert in een hulpprogramma van derden, dat hulpprogramma elke niet-nul uitvoercode als een mislukking kan beschouwen. Om dit te voorkomen, kunt u de uitvoercode wijzigen naar 0 als deze 1 retourneert.

De Robocopy “extra” bestand uitvoercode is een veelvoorkomende retourcode die betekent dat er een “extra” bestand in de doelmap staat maar niet in de bronmap. Deze code sluit extra’s uit die voorkomen dat er verwijderingen uit de bestemming plaatsvinden.

Het wijzigen van de uitvoercode in een batchbestand

Als u robocopy uitvoert met een batchbestand, kunt u de waarde van de variabele %ERRORLEVEL% vinden. Als deze 1 retourneert, gebruik dan het exit-woord om het script met 0 af te sluiten.

> (robocopy <options>) ^& IF %ERRORLEVEL% LEQ 1 exit 0

Het wijzigen van de uitvoercode in een PowerShell-script

Als u robocopy uitvoert in een PowerShell-script, kunt u robocopy aanroepen met Start-Process met PassThru om het gemaakte proces terug te geven en Wait om te wachten tot robocopy is voltooid. U kunt vervolgens de eigenschap ExitCode controleren op een waarde van 1. Als de uitvoercode 1 is, sluit dan het PowerShell-script af met een 0 met behulp van $host.SetShouldExit().

$exitCode = (Start-Process -FilePath 'robocopy' -ArgumentList '<option>' -PassThru -Wait).ExitCode
if ($exitCode -eq 1) {
    $host.SetShouldExit(0)
}

Veelvoorkomende fouten

Als u te maken heeft met duizenden bestanden, zult u onvermijdelijk enkele problemen tegenkomen. Hier is een uitsplitsing van veelvoorkomende fouten die ik ben tegengekomen

Fout Ongeldige parameter

Wanneer u een foutmelding ziet met fout ongeldige parameter, betekent dit meestal dat u op de een of andere manier opties aan robocopy hebt geprobeerd door te geven die niet in de juiste volgorde staan. De robocopy ongeldige parameter 3 fout is de meest voorkomende, zo lijkt het.

A common reason you’d receive this error is when you specify a source or destination directory with spaces and forget to surround it with quotes.

Voorbeelden van Robocopy

U kunt uw eigen reeksen van robocopy samenstellen of gebruikmaken van wat anderen hebben geleerd en deze gebruiken! In dit gedeelte zal ik gebruiksscenario’s behandelen over hoe robocopy te gebruiken om verschillende taken uit te voeren.

Vind de grootte van een netwerkmap

Bijdrager: northendtroooper (Reddit)

> robocopy "\\MACHINE\fileshare" c:\dummy /l /xj /e /nfl /ndl /njh /r:0 /mt:64

Snel de inhoud van een map verwijderen (rekening houdend met machtigingen op submappen)

Bijdrager: pizzasteveo (Reddit)

> robocopy c:\dummy c:\foldertodelete /MIR

Uitvoeren van grote bestandsmigraties

Bijdrager: @MySnozzberries (Twitter)

Het doel van dit fragment is om de eigendom van alle bestanden terug te zetten naar Beheerders. Vervolgens voegen we een expliciete ACE toe voor de Beheerdersgroep voor volledige controle op elk object recursief, hoewel we ook overerving instellen.

Tenslotte doen we een volledige robocopy-kopie met DACL’s naar de bestemming met log. Het logboek kan vervolgens worden gecontroleerd op aanvullende machtigingsproblemen of gewoon op bestandssloten en een andere delta-synchronisatie kan later worden uitgevoerd.

> 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

Recursief de Administrators-groep dwingen als eigenaar van alle bestanden en mappen. Er kunnen manieren zijn om dit te omzeilen, maar dit is de meest ingrijpende aanpak en meestal de snelste.

> takeown /F .\test /R /A /D Y

Als we de eigenaar zijn, kunnen we nu een nieuwe ACE afdwingen in de DACL voor elk object. Dit verleent de beheerders volledige controle met ingeschakelde overerving en recursief door het pad.

Dit instellen op de root met overerving zou de omgeving dekken, maar wanneer een share CREATOR OWNER heeft met Full Control (wat helaas zelfs de aanbeveling van Microsoft is voor zaken als gebruikersprofielopslag), kan de gebruiker overerving uitschakelen of ACE’s naar eigen goeddunken verwijderen. Dus een ingrijpende aanpak is meestal de snelste oplossing.

> icacls .\test /grant "Administrators":(OI)(CI)F /T

Zodra we de DACLs op het merendeel van de bestanden hebben gewijzigd, proberen we de bestanden naar een nieuwe locatie te kopiëren, gebruikelijk voor zaken als bestandsshare-migraties. Hiervoor kopiëren we de items recursief en gebruiken de /SEC-schakelaar om ook de Gegevens/Eigenschappen/Tijdstempels/DACLs te kopiëren.

Vervolgens loggen we de bewerking met volledige paden en voor alle objecten (/V verbose-schakelaar) naar een logbestand, zodat we de <5% fouten kunnen herstellen die meestal verband houden met padlengte of bestandsvergrendeling en meer gedetailleerd kunnen ingrijpen.

> robocopy .\test .\test2 /E /SEC /FP /V /LOG:.\temp.log

Dit is een eenvoudig kader voor het beheren van een bestandssharemigratie met minimale impact op de gebruikerservaring. Het verbetert ook de controle die IT heeft over de gegevens. Als een klant een sterke gegevensbeheerpraktijk heeft waar eigendom op een juist niveau van de onderliggende map wordt beheerd, wordt dit een gecompliceerder gesprek, maar de meeste klanten die we tegenkomen, hebben geluk als ze alleen overerving en op groepen gebaseerde ACE’s gebruiken, dus dit is de meest voorkomende situatie en oplossing waar we mee beginnen.

Robocopy Alternatieven

Robocopy is een geweldige tool, maar er zijn veel andere tools die erop lijken en mogelijk interessant kunnen zijn.

  • xxcopy – Een vergelijkbaar command-line hulpprogramma met veel opties.
  • Copy-Item PowerShell-cmdlet – Lang niet zo uitgebreid, maar veel eenvoudiger.
  • TreeSize – GUI en scriptbaar hulpprogramma om mapinformatie te vinden.

Samenvatting

Robocopy is een uitstekende tool om grote sets bestanden te kopiëren. Of je nu een gegevensmigratie uitvoert, mappen synchroniseert of gewoon een snelle en nauwkeurige manier nodig hebt om bestanden te kopiëren, robocopy is een uitstekende keuze.

Source:
https://adamtheautomator.com/robocopy/