Adam Automatorn

Robocopy är ett av de mest använda kommandoradsverktygen för att kopiera stora datamängder i Windows. Det är ett så populärt verktyg på grund av hur kraftfullt det är. Men med all den kraften kommer komplexitet. I den här guiden kommer vi att bryta ner all den komplexiteten och ge en komplett handledning om hur du använder detta användbara verktyg.

Robocopy är ett Windows-kommandoradsverktyg som har varit tillgängligt sedan Windows NT. Det är en ersättning för det mindre mångsidiga XCOPY-verktyget. Det låter dig ange en körväg eller serverväg för att kopiera/flytta filer vid en kommandotolk.

versionen av Robocopy när detta skrivs är upp till 10.0.18. Detta är den version jag utförde min testning på.

Robocopy ger en rad funktioner som du kan utnyttja för att utföra effektiva och snabba filkopior och rörelser. Det kan:

  • kopiera filer över ett nätverk med CV-funktioner
  • kan hoppa över NTFS-korsningspunkter som orsakar fel vanligtvis från oändliga slingor
  • kan kopiera fil-och katalogattribut som bevarar tidsstämplar
  • kan kopiera NTFS-behörigheter, ägare och granskningsinformation
  • kan kopiera katalogtidsstämplar
  • kan kopiera filer i ’backup’ läge för att säkerställa filer kopieras även dessa rättigheter har nekats till administratören
  • automatiska försök
  • kan synkronisera två mappar
  • är smart nog att hoppa över filer som redan kopierats
  • kan kopiera banor större än 256 tecken sökväg gräns
  • utföra asynkrona kopior med hjälp av dess multitrådning förmåga.
  • returnerar standardiserade exit-koder för användning i skript

som du kan se finns det mycket att kopiera. Jag ville täcka allt du behöver veta om detta praktiska verktyg.

Innehållsförteckning

vanlig Robocopy Syntax referens

varför en så lång blogginlägg på ett enda verktyg? Bara vila ögonen på borden nedan. Du har många alternativ att kopiera eller flytta filer med robocopy! Du kommer fler alternativ i de enskilda avsnitten.

dessa tabeller byggdes från hjälpsyntaxen som returnerades från robocopy /?. De har delats upp i mer meningsfulla sektioner, läggs till över tiden och städas upp för att ge mer användbar information.

Källalternativ

Byt förklaring standardbeteende motsvarande omkopplare anmärkningar
/s kopiera undermappar
/e kopiera undermappar inklusive tomma undermappar
/kopiera: Kopiera alternativ / kopiera: DAT D = Data, A=attribut, T=tidsstämplar S=säkerhet=NTFS ACL, O=ägare info, U = revision info. Fildata (D) innehåller alltid filtidsstämplar (T)
/sek kopiera filer med säkerhet /kopia: DATS
/DCOPY: t kopiera katalog tidsstämplar
/COPYALL kopiera all filinformation /kopiera: DATSOU detta förhindrar uttorkning av offlinefiler och kopierar istället filens tagg (åtminstone på emc VNX/Unity-system). Detta är inte officiellt dokumenterat! Om uttorkning är vad du behöver (anledningen till att jag hittade det här problemet) kan du inte kopiera ACL: erna längs dina filer. Kredit: Monsieurx (Reddit)
/NOCOPY kopiera ingen filinformation användbar med / PURGE
/a kopiera endast filer med Attributuppsättningen Arkiv
/M gilla / A, men ta bort Arkivattribut från källfiler
/LEV:n kopiera endast de översta n-nivåerna i källkodsträdet
/MAX: N maximal filålder-Uteslut filer som är äldre än n dagar / datum
/MINAGE: n minsta filålder-Uteslut filer som är nyare än n dagar / datum om n < 1900 då n = antal dagar, annars n = ÅÅÅÅMMDD datum
/FFT anta FAT fil gånger 2-andra datum / tid granularitet. Detta ersätter NTFS-tidsstämplar. Verkar vara mer tillförlitlig vid överföring via ett nätverk.
/256 Stäng av mycket lång väg (> 256 tecken) stöd

Destinationsalternativ

Byt förklaring standardbeteende motsvarande omkopplare anmärkningar
/A+: ange filattribut (er) på destinationsfiler + Lägg till
/A-: ta bort filattribut (er) på destinationsfiler
/FAT skapa målfiler med 8.3 endast FAT-filnamn
/skapa skapa katalogträdstruktur + endast filer med noll längd
/DST kompensera för en timmes DST-tidsskillnader

Kopiera alternativ

Byt förklaring standardbeteende motsvarande omkopplare anmärkningar
/l endast lista filer kopiera inte, tidsstämpel eller ta bort några filer
/MOV flytta filer ta bort från källan efter kopiering
/flytta flytta filer och kataloger ta bort från källan efter kopiering
/sl kopiera fil symboliska länkar istället för målet
/Z kopiera filer i omstarterbart läge överleva ett nätverk glitch
/B kopiera filer i säkerhetskopieringsläge
/J Kopiera med obuffrad I / O rekommenderas för stora filer
/NOOFFLOAD kopiera filer utan att använda Windows copy offload mekanism https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831628(v=ws.11)
/EFSRAW kopiera alla krypterade filer med EFS RAW-läge
/TIMFIX Fix filtider på alla filer, även hoppade över filer
/Xo exkludera äldre om målfilen finns och är samma datum eller nyare än källan – bry dig inte om att skriva över den.
/XC Uteslut ändrade filer
/xn exkludera nyare filer
/XX Uteslut filer som finns i destinationen men inte källan / XX
/XF-fil … Uteslut filer som matchar förnamn / sökvägar / jokertecken
/XD dirs … exkludera kataloger som matchar förnamn/sökvägar. /XF och / XD kan användas i kombination t. ex. ROBOCOPY c:\source d:\dest / XF*.doc *.xls / XD c:\unwanted / S
/IA: inkludera filer med något av de angivna attributen
/xa: Uteslut filer med något av de angivna attributen
/IM Skriv över ändrade filer. Detta inkluderar samma filer med olika tider.
/är Skriv över filer även om de redan är desamma
/det inkluderar tweaked filer
/xj Uteslut korsningspunkter från källan / XJ
/XJD Uteslut korsningspunkter från källkataloger
/XJF exkludera korsningspunkter från källfiler
/MAX: N exkludera filer som är större än n byte
/MIN: n Uteslut filer som är mindre än n byte
/MAXLAD: n Uteslut filer oanvända sedan n
/MINLAD:n Uteslut filer som används sedan n om n < 1900 då n = n dagar, annars n = ÅÅÅÅMMDD datum
/Mir spegla ett katalogträd /PURGE / E
/rensa ta bort dest-filer / mappar som inte längre finns i källan
/XL Uteslut filer som finns i källan men inte destinationen
/SECFIX Robocopy /secfix fixar fil säkerhet på alla filer, även hoppade över filer. ange vilken typ av säkerhetsinformation du vill kopiera genom att också använda ett av följande alternativ: / COPYALL / COPY: O / COPY: S/COPY: U / SEC
/ZB använd omstarterbart läge; om åtkomst nekas använd Backupläge

övervakningsalternativ

Byt förklaring standardbeteende motsvarande omkopplare anmärkningar
/R:n antal försök på misslyckade kopior / R:1000000 försök alltid att ställa in det här alternativet. Jag rekommenderar att du ställer in detta till 10-20 för att inte slösa tid på att försöka igen.
/W: n väntetid mellan försök / W:30 försök alltid att ställa in det här alternativet till ett lägre nummer för att försöka igen snabbare. Jag föreslår 5-10.
/REG spara / R: n och / W: n i Windows-registret som standardinställningar
/RH:hhmm-hhmm tider när nya kopior kan startas
/TBD vänta på att sharenames ska definieras försök igen fel 67
/PF kontrollera körtimmar på en per fil (inte per pass) basis
/mån: n kör igen när mer än n ändras sett
/MOT:m kör igen I m minuter, om det ändras

förstå Robocopy beteende

jag har nu helt blåste ditt sinne med alla potentiella syntaxalternativ tillgängliga för dig. Låt oss nu se alla de olika kombinationerna av hur vi kan använda denna syntax.

jag kunde ge dig en enormt lång lista med robocopy-kommandon med ett ständigt växande antal växlar. Men jag tycker att det är bättre att lära dig att fiska. Låt oss gå igenom hur man sätter känsla av alla dessa alternativ.

Robocopy kopierar bara hela kataloger

varje körning av robocopy kommer att ha en källa och en destinationskatalog. Robocopy kopierar och flyttar filer av hela katalogen. Det är inte möjligt att explicit kopiera en enda fil med robocopy. Använd copy eller PowerShell ’ s Copy-Item för det.

du kan dock robocopy enda fil med rätt filtrering som du lär dig om nedan. För att robocopy en enda fil fil, ange käll-och destinationskataloger omedelbart följt av filnamnet i källan.

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

Syntax beror på miljön

de alternativ du tillhandahåller robocopy beror också på miljön. Du måste svara på några frågor när du försöker ta reda på vilka alternativ du ska använda.

  • kommer du alltid att kopiera till en tom katalog?
  • är det möjligt att filer redan finns i destinationskatalogen?
  • kommer du att kopiera terabyte data eller bara några megabyte?
  • kommer du att kopiera filer över ett nätverk eller lokalt?
  • …och mer.

om det inte finns några filer i målfilkatalogen bör du inte bry dig om alternativ som skriver över filer. Om du inte kopierar filer över nätverket, oroa dig inte för dessa alternativ. Definiera uttryckligen dina nuvarande och potentiella framtida omständigheter som din miljö kommer att vara i.

känna igen standardalternativ

Robocopy använder många alternativ som standard. Du kan välja ut dem genom att titta på tabellerna ovan. Det ger också en praktisk utgång till varje gång du kör verktyget.

du kan se nedan att när jag körde robocopy med sina mest grundläggande alternativ (käll-och destinationsmappen) använde den automatiskt några alternativ. Att förstå standardbeteendet är viktigt.

referera till alternativen du ser i utmatningen med alternativförklaringarna ovan och du förstår exakt vad robocopy gör under omslaget.

standard robocopy-alternativ
standard robocopy-alternativ

förstå vad Robocopy-kommandon kan göra

om du har använt copy eller Powershells Copy-Item cmdlets, har du förmodligen angett en källa och destination och fortsatte om din dag. Det finns inte många alternativ du kan konfigurera där. Dessa robocopy-kommandon har ett standardbeteende.

men robocopy förstår å andra sidan mycket mer och ger dig flexibiliteten att justera beteendet så mycket du vill.

det är viktigt att veta robocopy är inte bara medveten om begreppet en fil eller katalog. Det finns mycket mer i ett filsystem än det och robocopy stöder nästan allt.

en fil som sitter på ett filsystem är inte bara ett dumt objekt med ett enda syfte. Det finns många olika attribut och saker som går med begreppet en fil. Till exempel har en fil attribut som:

  • en tidsstämpel (skriven, modifierad och tillgänglig)
  • NTFS ACL
  • en ägare
  • NTFS-granskningsinformation
  • dold flagga
  • Arkiverad flagga

när du kopierar eller flyttar en fil, du har möjlighet att ta med allt det där, om du vill.

förstå att när du kör robocopy kopierar du inte bara en fil, du kopierar också potentiellt all annan information med den. Det är viktigt att inse det och att redogöra för det i de alternativ du tillhandahåller robocopy.

Grunderna: Utför Whatif scenarier

om du har en enorm filserver någonstans du vill migrera och inte vill vidta några åtgärder ännu, kan du använda robocopy för att returnera vad det skulle ha gjort.

med alternativet /L kan du berätta för robocopy att räkna upp alla filer och/eller mappar du anger och returnera en lista över filer som den skulle ha kopierat/flyttat.

du kan använda alternativet /L med något annat alternativ. Detta är ett bra sätt att returnera alla alternativ robocopy skulle ha använt (standard eller inte). Det ger dig en övergripande bild av vad robocopy kommer att göra med tanke på de alternativ du gav den.

använda / L
använda /L

grunderna: kopiera filer

den mest grundläggande användningen av robocopy använder en käll-och destinationskatalog utan alternativ.

> robocopy C:\src C:\dst

det här alternativet kopierar alla filer (exklusive undermappar) från C:\src till C:\dst.

du kan också kopiera allt inklusive undermappar (tomma eller inte) och NTFS-behörigheter. Det här är, från vad jag kan säga, metoden att bokstavligen kopiera allt som handlar om en katalog med filer till en annan katalog.

nedan kopierar jag alla NTFS ACL, filägare, undermappar (inklusive tomma) och alla filattribut. Allt detta är möjligt med bara alternativet /E för att inkludera alla tomma undermappar och /COPYALL för att fånga resten.

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

grunderna: flytta filer

flytta filer överför filer från en katalog till en annan precis som kopiering gör. Den enda skillnaden med en move-operation är att källfilerna tas bort efter kopian.

för att ta bort filer/kataloger från källan efter kopiering, använd alternativet /MOV. Detta tar bort alla filer i den angivna katalogen (inga undermappar).

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

du kan också använda /MOVE för att flytta alla filer och undermappar.

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

grunderna: synkronisera filer

Robocopy låter dig synkronisera två kataloger. Detta innebär antingen att alla filer i destinationskatalogen finns i källkatalogen och inte mer. /MIR kommer att replikera data kopiera alla filer i källan inte i destinationen och ta bort filer i destinationen inte i källan. Akta dig!

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

kopiera filer över ett nätverk

om du kopierar filer över ett nätverk finns det några alternativ som du bör överväga.

Robocopy låter dig kopiera filer i ’restartable mode’ med alternativet /Z. Det betyder att om en fil börjar kopiera och misslyckas halvvägs kan kopian starta igen istället för att misslyckas helt. Alternativet /Z är användbart när strömmen skärs över ett nätverk.

Varning: vissa har rapporterat att använda /Z skär prestanda med 1/4. Låt mig veta dina resultat.

du kan också använda alternativet /FFT. Denna omkopplare har varit känd för att mer exakt bevara filtidsstämplar vid överföring över ett nätverk. Det här alternativet använder FAT – filsystemtidsstämplar istället för NTFS.

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

använda /IPG för att styra Mellanpaketgapet

när du kopierar filer över ett nätverk kan du använda omkopplaren /IPG. Detta är också känt som alternativet mellan paketgap. Det här alternativet definierar (i millisekunder) frekvensen i vilken robocopy väntar mellan att skicka nya paket.

använd alltid UNC-sökvägar och kör inte bokstäver

en läsare på Reddit upptäckte det svåra sättet att inte använda mappade enheter som en destinationskatalog. Använd istället alltid använd alltid en UNC-sökväg. Du kan stöta på problem med gränsen på 256 tecken om du gör det. Kolla in detta Microsoft doc för mer information.

Robocopy Backup Mode (Robocopy /Z)

Robocopy har ett alternativ (/B) eller som en säkerhetskopia till omstarterbart läge (/ZB) som kopierar filer i säkerhetskopieringsläge. Vad är ”backup mode” ändå?

när du vanligtvis kopierar en fil i Windows och trycker på en fil som kräver administratörsbehörighet för åtkomst får du ett felmeddelande som indikerar att du inte har behörighet. Även om du kanske kör som den lokala administratören låter Windows dig inte komma åt den.

VARNING: Det har rapporterats om skadade servervolymer när du kopierar data till en Windows Server 2016-server med de-duplicering aktiverad. När du använder /ZB – omkopplaren blir resultatet en dedup chunk-butik som skrotas i Systemvolyminformationen. De kopierade filerna är inte läsbara och genererar fel när de försöker manipulera dem. Serverfault länk med mer info.

Backupläge är ett sätt att komma åt filer utan att oroa sig för behörigheter.

Robocopy använder backup-läge för att använda SeBackupPrivilege för att läsa filer och serestoreprivilege användaren rätt att få tillgång till alla filer som behövs. Detta ignorerar alla ess som normalt skulle hindra dig från att komma åt dessa filer.

användarrättigheterna SeBackupPrivilege och SeRestorePrivilege tilldelas normalt användare i grupperna Backupoperatörer och administratörer men ibland kan de tas bort. Backup modul eliminerar denna risk och tillfälligt ger användaren utför robocopy dessa rättigheter.

om du vill kontrollera om ditt användarkonto har den rätten kan du köra whoami /priv och båda rättigheterna ska visas.

filtrera filer och mappar

den stora majoriteten av de tillgängliga alternativen är att utesluta filer och kataloger på många olika sätt. Jag har brutit ner alla sätt du kan filtrera eller utesluta filer och kataloger baserat på olika kriterier.

med filnamn eller filtillägg

filtrering vilka filer som kopieras/flyttas i ett robocopy-samtal görs med jokertecken. Du kan använda ett jokertecken för att filtrera på filer som matchar en viss filnamnsträng eller filnamnstillägg.

om du till exempel bara vill kopiera txt-filer kan du ange *.txt.

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

om du vill begränsa till endast filer som börjar med a, kan du använda a*.

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

Y0u kan också tillhandahålla flera uppsättningar filnamnsmatchningar genom att separera dem med ett mellanslag som visas nedan.

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

när du filtrerar efter filnamn visar robocopy dig filtret i utgången.

filtrera filer utgång
filtrera filer utgång

med katalognamn

Robocopy kan du filtrera objekt inte bara efter fil utan också efter katalognamn. Med robocopy /xd kan du utesluta vissa kataloger som matchar ett visst namn.

när du kopierar flera mappar, Använd /XD – omkopplaren för att utesluta mappar från körningen.

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

efter fil/katalog tidsstämpel

nedan hittar du alla robocopy-alternativ som utesluter filer och mappar baserat på olika tidsstämpelattribut.

Byt förklaring
/DCOPY: t kopiera katalog tidsstämplar
/MAX: N exkludera filer som är äldre än n dagar / datum
/MINAGE:n exkludera filer som är nyare än n dagar / datum
/XO om målfilen finns och är samma datum eller nyare än källan, skriv inte över
/XN om målfilen finns och är samma datum eller äldre än källan, skriv inte över

det finns två populära alternativ att välja när du filtrerar på saker som tidsstämpel; /XO och /MAXAGE.

/XO låter dig utesluta filer från kopiering endast om de är nyare än källan. Med alternativet /XO kan du robocopy bara nya filer efter åtkomstdatum.

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

om du vet att de maximala åldersfilerna kommer att vara, kan du också använda alternativet /MAXAGE. Detta gör att du kan ange i yyymmdd-format det äldre datumet en fil kan ha innan den kopieras.

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

Robocopy jobb

du har sett att dussintals alternativ är tillgängliga för dig. Det är lätt för dessa alternativ att snart bli obehagliga. Tack och lov har du ett bättre alternativ än att memorera och se till att alla dessa alternativ är på plats varje gång.

Robocopy jobbfiler är textfiler som innehåller ett alternativ per rad. Du använder vanligtvis robocopy för att skapa dessa jobbfiler. När du har skapat kan du antingen använda robocopy för att ändra dem eller en enkel textredigerare.

du har olika robocopy-kommandon som fungerar med jobb.

Byt förklaring standardbeteende motsvarande omkopplare anmärkningar
/jobb: Jobbnamn ta parametrar från den namngivna jobbfilen
/spara:Jobbnamn spara parametrar i den namngivna jobbfilen
/avsluta avsluta efter bearbetning kommandorad användbart för visning av parametrar
/NOSD ingen källkatalog anges
/NODD ingen destinationskatalog anges
/om inkludera följande filer

en typisk jobbfil skapad med robocopy har ett RCJ-tillägg och ser ut som nedanstående utdrag. Den här jobbfilen skapades genom att köra robocopy C:\src D:\dst /save:myjob. Du kan se att du kan ge kommentarer i jobbfilen med :: vilket är det mesta av vad den här filen har.

utan kommentarer skulle filen bara innehålla ett alternativ per rad.

:::: 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 :::

spara jobbfiler

spara en jobbfil är lika enkelt som att lägga till alternativet /SAVE:<jobname> i slutet av din syntax. Ersätt <jobname> med namnet på jobbet. Alternativet /SAVEskapar en fil som heter <jobname>.rcj i katalogen där du körde robocopy.

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

du måste ange /SAVE som det sista alternativet. Alla alternativ som anges efter /SAVE läggs inte till i jobbfilen. Observera också att även om en befintlig jobbfil redan finns kommer robocopy alltid att skriva över den befintliga. Backup eller versionskontroll dina jobbfiler!

Obs: Om du försöker använda alternativet /MT när du sparar i en jobbfil kommer den inte att finnas i jobbfilen. Låt mig veta om du kunde få detta att ingå.

använda jobbfiler

när ett jobb har sparats i en jobbfil kan du sedan använda alternativet /JOB:<jobname> för att ange jobbfilen som ska läsas från. Robocopy läser alla parametrar inuti jobbfilen. Det körs sedan precis som om du angav alternativen direkt på kommandoraden.

> robocopy /JOB:myjob

skapa en Jobbfil utan att köra ett jobb med /avsluta

syftet med alternativet /QUIT är inte uppenbart. På ytan kanske du tror /QUIT tvingar en körning att gå ut. Istället fungerar /QUIT mer som ett alternativ för att förhindra att ett jobb körs i första hand.

officiellt tvingar alternativet /QUIT ”robocopy att avsluta bearbetningen av kommandoraden”. Det skulle dock förklaras bättre som att skapa en jobbfil utan att köra ett jobb.

om du använder alternativet /SAVE kommer det också att köra jobbet automatiskt. Det finns inget sätt att skapa en jobbfil utan att först köra jobbet. Du kan skapa RCJ-jobbfilen med en textredigerare eller du kan använda robocopy gör det genom att lägga till /QUIT till slutet.

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

redigera en Jobbfil

eftersom jobbfiler bara är textfiler kan du redigera dem med din favorittextredigerare eller så kan robocopy göra det åt dig.

du kan redigera jobbfiler med en kombination av /JOB, /SAVEoch /QUIT.

till exempel kanske du vill utesluta alla EXE-filer från ditt robocopy-jobb som sparats i en jobbfil som heter backupfiles.rcj. Du har redan skapat jobbfilen och vill inte skriva över hela saken. Du kan lägga till det nya alternativet som nedan:

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

använda flera jobbfiler

du kan även kombinera användningen av jobbfiler också. När du anger flera jobbfiler i samma Körning kombineras alla alternativ som används i den körningen.

till exempel kanske du har en stor lista med filer att utesluta från ditt säkerhetskopieringsjobb. Öppna en textredigerare och Lägg till följande för att skapa en uteslutning.rcj-fil.

/XF a.exe b.txt c.cer

du kan sedan utesluta dessa filer från backupfiles jobbet så:

> robocopy /JOB:backupfiles /JOB:exclude

eftersom den ursprungliga backupfiles – jobbfilen redan exkluderade alla EXE-filer, skulle ovanstående körnings syntax se ut /XF *.exe a.exe b.txt c.cer. Robocopy kombinerar alla alternativ till ett.

Robocopy-mallar och använda alternativen /NOSD och /NODD

om du arbetar med många jobbfiler kan du bygga jobbfiler för att acceptera parametrar. Robocopy låter dig skicka värden från kommandoraden till jobb när de körs. En parameter är inte en robocopy-term men den passar bra i det här scenariot.

du kan bygga robocopy jobb att acceptera parametrar genom att inte ange en källa eller destination katalog antingen uttryckligen med /NOSD och /NODD alternativ eller bara inte inkludera en källa och destination katalog alls.

för ett enkelt exempel, skapa en jobbfil utan källa eller destination med hjälp av syntaxen nedan. Det här jobbets avsikt är att kopiera alla txt-och EXE-filer från en källa till en destinationskatalog.

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

på egen hand kommer det här jobbet aldrig att fungera eftersom det inte finns någon käll-eller destinationskatalog specificerad.

när du skapar ett jobb utan käll-och målkatalog skapas jobbfilen automatiskt med alternativen /NOSD och /NODD.

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

alternativen /NOSD talar om för robocopy att du inte inkluderade en källkatalog medan /NODD indikerar att du inte inkluderade en målkatalog. Den här jobbfilen är en ”mall” för andra jobb.

men du kan skicka ”parametrar” till den här jobbfilen för att tillhandahålla käll-och destinationskatalogerna.

för att använda jobbfilen som just skapats för att kopiera filer från C:\src till C:\ dst, du kan skicka dessa kataloger direkt på kommandoraden som sedan skickas till jobbet.

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

asynkron kopiering (Robocopy /MT)

som standard bearbetar robocopy bara en fil i taget. Du kan dock tvinga robocopy att kopiera fler filer än på en gång med alternativet /MT.

alternativet /MT låter dig ange hur många trådar robocopy ska använda för att kopiera filer. Maximalt är 128.

du kan använda /MT som så:

> robocopy C:\src C:\dst /MT:32

jag har valt 32 i detta fall som en baslinje. Jag föreslår att du börjar vid 32 för att se hur din dator och nätverk hanterar saker och justerar trådarna i enlighet därmed.

Observera att om du använder /MT kan du inte använda /IPG eller /EFSRAW. För bättre prestanda, mata inte ut loggen till konsolen. Använd istället /LOG.

schemaläggning Robocopy

Robocopy har några sätt du kan schemalägga när den körs.

använda /RH

använda alternativet /RH kan du berätta för robocopy att endast köras under en viss tid. Det här är bra om du har ett underhållsfönster eller en tid då alla har gått hem för dagen.

du kan ange en starttid och en sluttid i formatet HHMM-HHMM. Till exempel, för att åberopa robocopy men bara låta den springa mellan timmarna 5PM och 9AM enligt definitionen av systemklockan, kör:

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

du ser att om du åberopar robocopy utanför dessa timmar, kommer det att berätta den aktuella tiden och vänta på att starttiden ska köras.

Robocopy berättar vilken tid det kommer att starta om planerat
Robocopy berättar vilken tid det kommer att starta om planerat

du måste se till att båda tiderna är i 24-timmarsformat och är exakt fyra siffror långa. Fönstret måste vara större än två minuter.

som standard kommer /RH att kontrollera starttiden före hela körningen. Men om du har många filer och tror att processen kan gå längre än så kan du använda alternativet /PF. /PF kommer att tvinga robocopy att kontrollera fönstret före varje fil.

använda Schemaläggaren

Utdataloggen

Robocopy returnerar alltid en utdatalogg. Huruvida den loggen visas via stdout på konsolen och / eller omdirigeras till en loggfil är upp till dig.

du har många alternativ när du visar robocopy-utdata.

Byt förklaring standardbeteende motsvarande omkopplare anmärkningar
/NP inga framsteg. Undertrycker visningen av framstegsinformation. Detta kan vara användbart när utdata omdirigeras till en fil.
/unicode Visa statusutmatningen som unicode-text
/LOG: fil utgångsstatus för att logga fil och skriva över
/UNILOG: fil utgångsstatus till unicode loggfil och skriva över
/LOG+:fil utgångsstatus för att logga fil och lägga till befintlig loggfil
/UNILOG+: fil utgångsstatus till unicode-loggfilen och Lägg till befintlig loggfil
/TS visar filens tidsstämplar för varje bearbetad fil.
/FP ersätter enkla filnamn med fullständiga filsökvägar i utdata.
/NS visar inte filstorlekar.
/NC döljer filklassen ”texttaggar” (gå hit för mer information: https://www.uvm.edu/~gcd/2015/04/robocopy-file-classes/)
/NFL döljer filnamn. Fel loggas dock fortfarande. Alla filer filer raderas eller skulle tas bort om / L utelämnades alltid loggas
/ndl döljer utdata från kataloglistan. Fullständiga filsökvägar matas ut för att lättare spåra problematiska filer.
/TEE utgång till konsolfönstret, liksom loggfilen
/NJH inget jobb header
/NJS ingen jobbsammanfattning
/byte utskriftsstorlekar som byte
/X rapportera alla filer, inte bara de markerade & kopierade
/V producera verbose output log, visar hoppade filer
/eta Visa beräknad ankomsttid för kopierade filer. Se starttiden för varje filkopia och den beräknade tiden för slutförande baserat på den observerade genomströmningen av tidigare kopior. Tider visas efter filnamnet i formatet HH: MM – > HH: MM (start – > Slutför).
/felsöka Visa felsökningsvolyminformation

begränsande Loggelement med /NJS och / NJH

som standard returnerar robocopy två element i utdata, en jobbrubrik och en jobbsammanfattning.

jobbhuvudet är den enkla ROBOCOPY-rubriken högst upp.

Robocopy jobbhuvud
Robocopy jobbhuvud

jobbsammanfattningen visar en sammanfattningsstatus för alla filer / mappar, hur mycket data som överfördes och tiden då körningen slutade.

Robocopy jobb sammanfattning
Robocopy jobb sammanfattning

du kan dölja vart och ett av dessa element med alternativet /NJH för att dölja jobbhuvudet och alternativet /NJS för att dölja jobbsammanfattningen. Du kan inkludera något av dessa alternativ eller båda tillsammans.

dölja jobbhuvudet och jobbsammanfattningen
dölja jobbhuvudet och jobbsammanfattningen

omdirigera Utdataloggen till en fil

om du behöver spara utdataloggen kan du omdirigera den till en textfil och/eller visa den på konsolen. Du kan göra det med traditionella utgångs omdirigerare som >, >>, PowerShell eller alternativet /LOG.

för att omdirigera utdataloggen till en fil med alternativet /LOG skriva över en befintlig loggfil, använd syntaxen /LOG:<filepath> som nedan. Den enda utmatningen du får på konsolen är sökvägen till loggfilen.

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

om du vill behålla innehållet i en befintlig loggfil och lägga till resultat i en fil kan du använda operatören + enligt nedan.

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

omdirigera Utdataloggen till en fil och Visa på konsolen

om du vill spara utdataloggen till en fil men även se den på konsolen kan du använda alternativet /TEE. Det här alternativet gör att robocopy skriver utdata till loggfilen samtidigt som standardbeteendet för att returnera utdata till konsolen bibehålls.

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

avsluta koder

liksom alla andra kommandoradsverktyg, robocopy returnerar avsluta koder beroende på resultatet av utförandet. Vi önskar alla robocopy att alltid avsluta framgångsrikt med en 0 men det händer inte alltid.

nedan hittar du all utgångskod som robocopy returnerar och deras förklaring. Varje exit-kod som är större än sju indikerar minst ett fel under körning.

avsluta kod förklaring
0 ingen åtgärd utförd. Källa och destination synkroniseras.
1 minst en fil kopierades framgångsrikt.
2 Extra filer eller kataloger upptäcktes. Undersök loggen.
3 avsluta koderna 2 och 1 kombinerat.
4 felaktiga filer eller kataloger hittades. Undersök loggen.
5 avsluta koder 4 och 1 kombinerat.
6 avsluta koder 4 och 2 kombinerat.
7 avsluta koder 4, 1 och 2 kombinerat.
8 minst en fil eller katalog kunde inte kopieras. Försök igen gräns överskrids. Undersök loggen.
16 kopian misslyckades katastrofalt.

Observera att om du kör robocopy i ett tredjepartsverktyg kan det verktyget tro att någon exit-kod som inte är noll är ett fel. För att förhindra detta kan du ändra utgångskoden till 0 om den returnerar 1.

Robocopy” extra ”- filutgångskoden är en vanlig returkod som betyder att en” extra ” – fil finns i målmappen men inte källmappen. Den här koden utesluter extrafunktioner som förhindrar raderingar från destinationen.

ändra Utgångskoden i en batchfil

om du kör robocopy med en batchfil kan du hitta värdet på variabeln %ERRORLEVEL%. Om den returnerar 1 använd sedan nyckelordet exit för att avsluta skriptet med 0.

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

ändra Utgångskoden i ett PowerShell-skript

om du kör robocopy i ett PowerShell-skript kan du anropa robocopy med Start-Process med PassThru för att returnera den skapade processen och Wait för att vänta på att robocopy ska slutföras. Du kan sedan kontrollera egenskapen ExitCode för ett värde av 1. Om exit-koden är 1, avsluta PowerShell-skriptet med en 0 med $host.SetShouldExit().

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

vanliga fel

om du har att göra med tusentals filer kommer du säkert att stöta på några problem. Här är en uppdelning av vanliga fel som jag har stött på

fel Ogiltig Parameter

när du ser ett fel som anger fel Ogiltig parameter betyder det normalt att du har försökt att skicka alternativ till robocopy ur sekvensen på något sätt. Robocopy invalid parameter 3-felet är det vanligaste, verkar det.

en vanlig orsak till att du får det här felet är när du anger en käll-eller destinationskatalog med mellanslag och glömmer att omge den med citat.

Robocopy exempel

du kan bygga dina egna strängar av robocopy eller så kan du ta vad andra har lärt sig och använda dem! I det här avsnittet täcker jag användningsfall om hur man använder robocopy för att utföra olika saker.

hitta katalogstorleken för en nätverksmapp

bidragsgivare: northendtroooper (Reddit)

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

snabbt ta bort mappinnehåll (ignorera behörigheter på undermappar)

bidragsgivare: pizzasteveo (Reddit)

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

utför stora filmigreringar

bidragsgivare: @MySnozzberries (Twitter)

målet med detta utdrag är att tvinga äganderätten till alla filer tillbaka till administratörer. Vi lägger sedan till ett explicit ess för gruppen Administratörer för full kontroll på varje objekt rekursivt även om vi också ställer in arv.

slutligen gör vi en fullständig robocopy kopia med DACLs till destinationen med logg. Loggen kan sedan granskas för ytterligare behörighetsproblem eller bara fillås och en annan delta-synkronisering kan utföras senare.

> 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

rekursivt tvinga gruppen administratörer som ägare till alla filer och kataloger. Det kan finnas vägar runt detta, men detta är den mest tunghänt tillvägagångssätt och oftast den snabbaste.

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

när vi är ägaren kan vi nu tvinga ett nytt ess i DACL för varje objekt. Detta ger administratörer full kontroll med arv aktiverat och rekursivt genom sökvägen.

att ställa in detta vid roten med arv skulle täcka miljön, men när en aktie har skapare ägare med Full kontroll (vilket tyvärr även är Microsofts rekommendation för saker som file user profile stores) kan användaren inaktivera arv eller ta bort Ess efter eget gottfinnande. Så en tung hand är vanligtvis den snabbaste fixen.

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

när vi har ändrat DACLs på de flesta filer försöker vi kopiera filerna till en ny plats, vanligt för saker som fildelning migreringar. För detta kopierar vi objekten rekursivt och använder /SEC – omkopplaren för att också kopiera Data/attribut/tidsstämplar/DACLs.

sedan loggar vi operationen med fullständiga sökvägar och för alla objekt (/V verbose switch) till en logg, så vi kan åtgärda <5% av fel som vanligtvis är banlängd eller fillås relaterade och blir mer granulära.

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

Detta är en enkel ram för att hantera en fildelning migration med minimal inverkan på användarupplevelsen. Det förbättrar också kontrollen över data. Om en kund har en stark datastyrningspraxis där ägandet hanteras korrekt på en barnmappnivå blir detta en mer komplicerad diskussion, men de flesta kunder som vi finner har tur att bara använda arv och gruppbaserade ess, så det här är den vanligaste situationen och fixar vi börjar på.

Robocopy-alternativ

Robocopy är ett fantastiskt verktyg men det finns så många andra verktyg som liknar det som kan vara av intresse.

  • xxcopy – ett liknande kommandoradsverktyg med massor av alternativ.
  • Copy-Item PowerShell cmdlet – inte alls som presenterat men mycket enklare.
  • TreeSize – GUI och skript verktyg för att hitta mappinformation.

sammanfattning

Robocopy är ett utmärkt verktyg för att kopiera stora uppsättningar filer. Oavsett om du gör en datamigrering, håller mappar synkroniserade eller helt enkelt behöver ett snabbt sätt att exakt kopiera filer, är robocopy ett utmärkt val.

Lämna ett svar

Din e-postadress kommer inte publiceras.