Adam the Automator

Robocopy è una delle utility da riga di comando più utilizzate per copiare grandi volumi di dati in Windows. È uno strumento così popolare a causa di quanto sia potente. Ma con tutto quel potere arriva la complessità. In questa guida, analizzeremo tutta quella complessità e forniremo un tutorial completo sull’utilizzo di questo utile strumento.

Robocopy è un’utilità da riga di comando di Windows disponibile da Windows NT. È un sostituto per l’utilità xcopy meno versatile. Esso consente di specificare un percorso di unità o il percorso del server per copiare/spostare i file al prompt dei comandi.

La versione di Robocopy al momento della stesura di questo articolo è fino a 10.0.18. Questa è la versione su cui ho eseguito il mio test.

Robocopy offre una serie di funzioni che è possibile sfruttare per eseguire copie di file efficienti e veloci e si muove. Può:

  • Copiare i file su una rete di riprendere la capacità di
  • Possibile ignorare i punti di giunzione NTFS causando il fallimento in genere da un loop infinito
  • copia file e directory attributi di preservare timestamp
  • Possibile copiare le autorizzazioni NTFS, proprietari, e di revisione info
  • e ‘Possibile copiare la directory timestamp
  • e’ Possibile fare una copia del file “backup” modalità per garantire che i file vengono copiati anche quei diritti sono stati negati per l’amministratore
  • i tentativi Automatici
  • Possibile sincronizzare due cartelle
  • È abbastanza intelligente per ignorare i file già copiato
  • Può copiare percorsi più grandi del limite di 256 caratteri
  • Eseguire copie asincrone utilizzando la sua capacità di multithreading.
  • Restituisce codici di uscita standardizzati da utilizzare negli script

Come puoi vedere, c’è molto da copiare. Volevo coprire tutto quello che c’è da sapere su questo pratico strumento.

Indice

Common Robocopy Syntax Reference

Perché un post così lungo sul blog su una singola utility? Basta rifatevi gli occhi sui tavoli qui sotto. Hai un sacco di opzioni per copiare o spostare i file con robocopy! Sarà più opzioni nelle singole sezioni.

Queste tabelle sono state create dalla sintassi della guida restituita da robocopy /?. Sono stati suddivisi in sezioni più significative, aggiunte nel tempo e ripulite per fornire informazioni più utili.

Opzioni Fonte

Interruttore Descrizione Comportamento Predefinito Equivalente Switch Note
/S Copia sottocartelle
/E Copia sottocartelle comprese le sottocartelle vuote
/COPIA: opzioni di Copia /COPIA:DAT D=Dati=Attributi, T=Timestamp S=Sicurezza=Acl NTFS, O=informazioni sul Proprietario, U=aUditing info. File di Dati (D) include sempre il Timestamp del file (T)
/SEC Copiare i file con Sicurezza /COPIA:DAT
/DCOPY:T Copia directory timestamp
/COPYALL Copia TUTTI i file info /COPIA:DATSOU Questo consentirà di evitare la disidratazione file non in linea e di copiare il tag del file (emc VNX/Unità sistemi almeno). Questo non è ufficialmente documentato! Se la disidratazione è ciò di cui hai bisogno (motivo per cui ho trovato questo problema), non puoi copiare gli ACL lungo i tuoi file. CREDITO: Monsieurx (Reddit)
/NOCOPY Copiare NESSUN file info utile /PURGE
/UN Copia solo i file con attributo di Archivio
/M come /A, ma rimuovere l’attributo di Archivio dal file di origine
/LEV:n copiare Solo i primi n Livelli dell’albero dei sorgenti
/MAXAGE:n Massima del file di ETÀ escludere i file più vecchi di n giorni/data
/MINAGE:n Minimo del file ETÀ escludere i file più recenti di n giorni/data Se n < 1900, allora n = numero di giorni, else n = AAAAMMGG data
/FFT si Supponga di File FAT Volte 2-seconda data/ora di granularità. Questo sostituisce i timestamp NTFS. Sembra essere più affidabile quando si trasferisce su una rete.
/256 spegnere percorso molto lungo (> 256 caratteri) supporto

Opzioni di Destinazione

Interruttore Descrizione Comportamento Predefinito Equivalente Switch Note
/A+: Set di attributi di file(s) sul file di destinazione + aggiungi
/Un-: Rimuovi gli attributi dei file sui file di destinazione
/FAT Crea file di destinazione usando 8.3 FAT solo nomi di file
/CREARE Creare un albero + file di lunghezza zero solo
/DST Compensare di un’ora-ora legale di differenze

Opzioni Di Copia

Interruttore Descrizione Comportamento Predefinito Equivalente Switch Note
/L Elenca solo i file non copiare, timestamp o cancellare qualsiasi file
/MOV Spostare i file Eliminare dalla sorgente dopo la copia
/SPOSTARE Spostare file e cartelle Eliminare dalla sorgente dopo la copia
/sl Copia file link simbolici invece di destinazione
/Z Copiare i file in modalità riavviabile Sopravvivere a una rete glitch
/B Copiare i file in modalità di backup
/J Copia utilizzando senza buffer I/O Raccomandato per file di grandi dimensioni
/NOOFFLOAD Copiare i file senza utilizzare la copia di Windows offload meccanismo https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831628(v=rovescio del lavoro.11)
/EFSRAW Copiare i file crittografati utilizzando EFS modalità RAW
/TIMFIX Fix file di volte su tutti i file, anche quelli ignorati
/XO Escludere anziani se il file di destinazione esiste ed è la stessa data o più recente rispetto all’origine – non preoccupatevi di sovrascrivere il file.
/XC Escludere i file modificati
/XN Escludere i file più recenti
/XX Escludere i file presenti nella destinazione, ma non di origine /XX
/XF file … Escludere i file che corrispondono a nomi/percorsi/caratteri jolly
/XD dirs … Escludere le directory che corrispondono dato i nomi e i percorsi. /XF e / XD possono essere utilizzati in combinazione, ad esempio ROBOCOPY c:\source d:\dest / XF *.doc *.xls /XD c:\unwanted /S
/IA: Includere il file con le date attributi
/XA: Escludi file con le date attributi
/IM Sovrascrivere i file modificati. Questo include gli stessi file con tempi diversi.
Sovrascrivere i file, anche se sono già le stesse
/IT Includere modificato il file
/XJ Escludere i punti di giunzione da fonte /XJ
/xj d Escludere i punti di giunzione dalla directory di origine
/XJF Escludere i punti di giunzione dall’ file di origine
/MAX:n Escludere i file più grandi di n byte
/MIN:n Escludere i file più piccoli di n byte
/MAXLAD:n Escludere i file inutilizzati dal n
/MINLAD:n Escludere i file utilizzati dal n Se n < 1900, allora n = n giorni, else n = AAAAMMGG data
/MIR Specchio di un albero di directory /PURGE /E
/PURGE Elimina dest i file/cartelle che non esistono più in fonte
/XL Escludere i file presenti nella fonte, ma non la destinazione
/SECFIX Robocopy /secfix correzioni file sicurezza su tutti i file, anche i file saltati. Specificare il tipo di protezione che si desidera copiare le informazioni anche con l’utilizzo di una di queste opzioni: /COPYALL /COPIA:O /COPIA:S /COPIA:U /SEC
/ZB Utilizzare modalità riavviabile; se l’accesso è negato l’utilizzo modalità di Backup

Opzioni Di Monitoraggio

Interruttore Descrizione Comportamento Predefinito Equivalente Switch Note
/R:n Numero di tentativi su copie fallite / R:1000000 Cerca sempre di impostare questa opzione. Raccomando di impostarlo su 10-20 per non perdere tempo a riprovare.
/W: n Tempo di attesa tra i tentativi /W:30 Prova sempre a impostare questa opzione su un numero inferiore per riprovare più rapidamente. Suggerisco 5-10.
/REG Salva / R: n e / W: n nel registro di Windows come impostazioni predefinite
/RH:hhmm-hhmm volte quando nuovi copie può essere avviato
/TBD Attendere sharenames per essere definiti errore di tentativi 67
/PF Controllare le ore di funzionamento per ogni file (non per passare) base
/LUN:n Esegui di nuovo quando più di n modifiche visto
/MOT:m Eseguire nuovamente in m minuti, se modificato

Comprendere il comportamento di Robocopy

Ora ti ho completamente sbalordito con tutte le potenziali opzioni di sintassi disponibili. Vediamo ora tutte le diverse combinazioni di come possiamo usare questa sintassi.

Potrei fornirti una lista enormemente lunga di comandi robocopy con un numero sempre crescente di switch. Ma penso che sia meglio insegnarti a pescare. Andiamo oltre come mettere senso fuori di tutte queste opzioni.

Robocopy Copia solo intere directory

Ogni esecuzione di robocopy avrà una directory di origine e una di destinazione. Robocopy copia e sposta i file per intera directory. Non è possibile copiare esplicitamente un singolo file con robocopy. Usa copy o Copy-Item di PowerShell per questo.

Tuttavia, puoi robocopy single file con il filtro giusto che imparerai di seguito. Per robocopy un singolo file file, specificare le directory di origine e di destinazione immediatamente seguite dal nome del file nell’origine.

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

La sintassi dipende dall’ambiente

Inoltre, le opzioni fornite a robocopy dipenderanno dall’ambiente. Avrete bisogno di rispondere ad alcune domande quando si cerca di capire quali opzioni da utilizzare.

  • Copierai sempre in una directory vuota?
  • È possibile che i file possano già esistere nella directory di destinazione?
  • Copierai terabyte di dati o solo pochi megabyte?
  • Copierai file su una rete o localmente?
  • …e altro ancora.

Se non ci sono file nella directory del file di destinazione, non dovresti preoccuparti delle opzioni che sovrascrivono i file. Se non sarà la copia di file in rete, non preoccuparti di queste opzioni. Definisci esplicitamente le tue circostanze attuali e potenziali future in cui si troverà il tuo ambiente.

Riconoscere le opzioni predefinite

Robocopy utilizza molte opzioni per impostazione predefinita. È possibile scegliere fuori guardando le tabelle di cui sopra. Fornisce inoltre un output pratico per ogni volta che si esegue l’utilità.

Puoi vedere sotto che quando ho eseguito robocopy con le sue opzioni più basilari (la cartella di origine e di destinazione), ha utilizzato automaticamente alcune opzioni. Comprendere il comportamento predefinito è importante.

Fai riferimento alle opzioni che vedi nell’output con le spiegazioni delle opzioni sopra e capirai esattamente cosa sta facendo robocopy sotto le coperte.

Opzioni robocopy predefinite
Opzioni robocopy predefinite

Capire cosa possono fare i comandi Robocopy

Se hai usato i cmdlet copy o Copy-Item di PowerShell, probabilmente hai specificato un’origine e una destinazione e hai continuato la tua giornata. Non ci sono molte opzioni che puoi configurare lì. Questi comandi robocopy hanno un comportamento predefinito.

Ma robocopy, d’altra parte, capisce molto di più e ti dà la flessibilità di modificare il comportamento quanto vuoi.

È importante sapere che robocopy non è solo a conoscenza del concetto di file o directory. C’è molto di più in un filesystem e robocopy supporta praticamente tutto.

Un file seduto su un filesystem non è solo un oggetto stupido con un unico scopo. Ci sono molti attributi e cose diverse che vanno con il concetto di un file. Ad esempio, un file ha attributi come:

  • un timestamp (scritti, modificati e accessibile)
  • NTFS ACL
  • proprietario
  • NTFS informazioni di controllo
  • flag hidden
  • archiviato bandiera

Quando si copia o si sposta un file, si ha la possibilità di portare tutta quella roba insieme con esso, se si desidera.

Capire che quando si esegue robocopy, non si sta solo copiando un file, si sta anche potenzialmente copiando tutte le altre informazioni con esso. È importante rendersene conto e tenerne conto nelle opzioni fornite da robocopy.

Le basi: Esecuzione di scenari WhatIf

Se hai un enorme file server da qualche parte che desideri migrare e non vuoi ancora intraprendere alcuna azione, puoi usare robocopy per restituire ciò che avrebbe fatto.

Usando l’opzione /L, puoi dire a robocopy di enumerare tutti i file e/o le cartelle specificate e restituire un elenco di file che avrebbe copiato/spostato.

È possibile utilizzare l’opzione /L con qualsiasi altra opzione. Questo è un ottimo modo per restituire tutte le opzioni che robocopy avrebbe usato (predefinito o meno). Ti darà una visione d’insieme di ciò che robocopy farà date le opzioni che hai fornito.

Utilizzo di / L
Utilizzo /L

Le basi: Copia di file

L’uso più semplice di robocopy è l’utilizzo di una directory di origine e di destinazione senza opzioni.

> robocopy C:\src C:\dst

Questa opzione copierà tutti i file (escluse le sottocartelle) da C:\src a C:\dst.

Puoi anche copiare tutto, comprese le sottocartelle (vuote o meno) e le autorizzazioni NTFS. Questo è, da quello che posso dire, il metodo per copiare letteralmente tutto ciò che c’è su una directory di file in un’altra directory.

Di seguito sto copiando tutti gli ACL NTFS, i proprietari di file, le sottocartelle (comprese quelle vuote) e tutti gli attributi dei file. Tutto ciò è reso possibile solo con l’opzione /E per includere tutte le sottocartelle vuote e /COPYALL per catturare il resto.

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

Le basi: Spostare i file

Spostare i file trasferisce i file da una directory all’altra proprio come fa la copia. L’unica differenza con un’operazione di spostamento è che i file di origine vengono rimossi dopo la copia.

Per eliminare file/directory dall’origine dopo la copia, utilizzare l’opzione /MOV. Questo rimuoverà tutti i file nella directory specificata (nessuna sottocartella).

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

Puoi anche usare /MOVE per spostare tutti i file e le sottocartelle.

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

Le basi: Sincronizzazione dei file

Robocopy consente di sincronizzare due directory. Ciò significa garantire che tutti i file nella directory di destinazione siano nella directory di origine e non di più. /MIR replicherà i dati copiando tutti i file nell’origine non nella destinazione ed eliminerà i file nella destinazione non nell’origine. Attenzione!

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

Copia di file su una rete

Se stai copiando file su una rete, ci sono alcune opzioni che dovresti prendere in considerazione.

Robocopy consente di copiare i file in ‘modalità riavviabile’ utilizzando l’opzione /Z. Ciò significa che se un file inizia la copia e fallisce a metà strada, la copia può ricominciare invece di fallire completamente. L’opzione /Z è utile quando il flusso viene tagliato su una rete.

Attenzione: Alcuni hanno segnalato che l’uso di /Z riduce le prestazioni di 1/4. Fammi sapere le tue scoperte.

È anche possibile utilizzare l’opzione /FFT. Questo switch è noto per preservare in modo più accurato i timestamp dei file durante il trasferimento su una rete. Questa opzione utilizza i timestamp del file system FAT invece di NTFS.

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

Utilizzando /IPG per controllare Inter-Packet Gap

Quando si copiano file su una rete, è possibile utilizzare l’opzione /IPG. Questo è anche noto come l’opzione inter-packet gap. Questa opzione definisce (in millisecondi) la frequenza in cui robocopy attenderà tra l’invio di nuovi pacchetti.

Usa sempre Percorsi UNC non lettere di unità

Un lettore su Reddit ha scoperto il modo più difficile per non utilizzare le unità mappate come directory di destinazione. Invece, usa sempre usa sempre un percorso UNC. Potresti incorrere in problemi con il limite di 256 caratteri se lo fai. Dai un’occhiata a questo documento Microsoft per ulteriori informazioni.

Modalità di backup Robocopy (Robocopy /Z)

Robocopy ha un’opzione (/B) o come backup in modalità riavviabile (/ZB) che copia i file in modalità di backup. Che cosa è “modalità di backup” in ogni caso?

Quando di solito copi un file in Windows e premi un file che richiede privilegi amministrativi per accedere, riceverai un errore che indica che non hai l’autorizzazione. Anche se potresti essere in esecuzione come amministratore locale, Windows non ti consente di accedervi.

AVVISO: sono stati segnalati volumi server danneggiati durante la copia dei dati su un server Windows Server 2016 con la de-duplicazione attivata. Quando si utilizza l’opzione /ZB, il risultato sarà un archivio di blocchi di deduplica che viene cestinato nelle informazioni sul volume del sistema. I file copiati non saranno leggibili e genereranno errori quando si tenta di manipolarli. Collegamento Serverfault con maggiori informazioni.

La modalità di backup è un modo per accedere ai file senza preoccuparsi delle autorizzazioni.

Robocopy utilizza la modalità di backup per utilizzare SeBackupPrivilege per la lettura dei file e il diritto dell’utente SeRestorePrivilege di accedere a tutti i file di cui ha bisogno. Questo ignora tutti gli ASSI che normalmente ti impediscono di accedere a quei file.

I diritti utente SeBackupPrivilege e SeRestorePrivilege sono normalmente assegnati agli utenti nei gruppi Operatori e amministratori di backup, ma a volte possono essere rimossi. Il modulo di backup elimina tale rischio e concede temporaneamente all’utente l’esecuzione di robocopy tali diritti.

Se desideri verificare se il tuo account utente ha questo diritto, puoi eseguire whoami /priv e entrambi i diritti dovrebbero essere visualizzati.

Filtraggio di file e cartelle

La grande maggioranza delle opzioni disponibili è quella di escludere file e directory in molti modi diversi. Ho suddiviso tutti i modi in cui è possibile filtrare o escludere file e directory in base a vari criteri.

Per nome file o estensione file

Filtrare quali file vengono copiati/spostati in una chiamata robocopy viene eseguito utilizzando i caratteri jolly. È possibile utilizzare un carattere jolly per filtrare i file corrispondenti a una specifica stringa di nome file o estensione.

Ad esempio, per copiare solo i file TXT, è possibile specificare *.txt.

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

Se si desidera limitare solo i file che iniziano con a, è possibile utilizzare a*.

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

Y0u può anche fornire più set di corrispondenze di nomi di file separandoli con uno spazio come mostrato di seguito.

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

Quando si filtra per nome file, robocopy mostrerà il filtro nell’output.

FIltering files output
FIltering files output

Per nome di directory

Robocopy consente di filtrare gli elementi non solo per file, ma anche per nome di directory. Utilizzando robocopy /xd, è possibile escludere alcune directory corrispondenti a un nome specifico.

Quando si copiano più cartelle, utilizzare l’opzione /XD per escludere le cartelle dall’esecuzione.

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

Per Timestamp File/Directory

Di seguito troverai tutte le opzioni di robocopy che escluderanno file e cartelle in base a vari attributi di timestamp.

Interruttore Spiegazione
/DCOPY:T Copia directory timestamp
/MAXAGE:n Escludere i file più vecchi di n giorni/data
/MINAGE:n Escludere i file più recenti di n giorni/data
/XO Se il file di destinazione esiste ed è la stessa data o più recente rispetto all’origine, non sovrascrivere
/XN Se il file di destinazione esiste ed è la stessa data o meno la fonte, non sovrascrivere

Ci sono due opzioni popolari per scegliere quando il filtro su cose come timestamp; /XO e /MAXAGE.

/XO consente di escludere i file dalla copia solo se sono più recenti dell’origine. Utilizzando l’opzione /XO, è possibile robocopy solo i nuovi file per data di accesso.

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

Se sai che i file di età massima saranno, puoi anche usare l’opzione /MAXAGE. Ciò consente di specificare in formato YYYMMDD la data precedente che un file può avere prima di essere copiato.

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

Robocopy Jobs

Hai visto che sono disponibili decine di opzioni. È facile per queste opzioni diventare presto ingombranti. Per fortuna, hai un’opzione migliore che memorizzare e garantire che tutte queste opzioni siano perfette ogni volta.

I file di lavoro Robocopy sono file di testo contenenti un’opzione per riga. In genere si utilizza robocopy per creare questi file di lavoro. Una volta creato, è possibile utilizzare robocopy per modificarli o un semplice editor di testo.

Hai vari comandi robocopy che funzionano con i lavori.

Interruttore Descrizione Comportamento Predefinito Equivalente Switch Note
/LAVORO:jobname Prendere i parametri da il nome file di lavoro
/SALVA:jobname Salvare i parametri per il nome file di lavoro
/ESCI Esci dopo l’elaborazione della riga di comando Utile per la visualizzazione di parametri
/NOSD Nessuna fonte directory specificata
/NODD Nessuna directory di destinazione specificata
/SE Includere i seguenti file

Un tipico file di lavoro creato con robocopy ha un’estensione RCJ e assomiglia allo snippet sottostante. Questo file di lavoro è stato creato eseguendo robocopy C:\src D:\dst /save:myjob. Puoi vedere che puoi fornire commenti nel file di lavoro usando :: che è la maggior parte di ciò che questo file ha.

Senza commenti, il file conterrebbe solo un’opzione per riga.

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

Salvataggio di file di lavoro

Salvare un file di lavoro equivale semplicemente ad aggiungere l’opzione /SAVE:<jobname> alla fine della sintassi. Sostituire <jobname> con il nome del lavoro. L’opzione /SAVE creerà un file chiamato<jobname >.rcj nella directory in cui è stato eseguito robocopy.

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

È necessario specificare /SAVE come ultima opzione. Tutte le opzioni specificate dopo /SAVE non verranno aggiunte al file di lavoro. Inoltre, si noti che anche se esiste già un file di lavoro esistente, robocopy sovrascriverà sempre quello esistente. Backup o versione controllare i file di lavoro!

Nota: se si tenta di utilizzare l’opzione /MT durante il salvataggio in un file di lavoro, non sarà presente nel file di lavoro. Fatemi sapere se siete stati in grado di ottenere questo da includere.

Utilizzo dei file di lavoro

Una volta salvato un lavoro in un file di lavoro, è possibile utilizzare l’opzione /JOB:<jobname> per specificare il file di lavoro da leggere. Robocopy legge tutti i parametri all’interno del file di lavoro. Quindi viene eseguito proprio come se avessi fornito le opzioni direttamente sulla riga di comando.

> robocopy /JOB:myjob

Creare un file di lavoro senza eseguire un lavoro Utilizzando /QUIT

Lo scopo dell’opzione /QUIT non è ovvio. In superficie, potresti pensare che /QUIT forza una corsa per uscire. Invece, /QUIT agisce più come un’opzione per impedire l’esecuzione di un lavoro in primo luogo.

Ufficialmente, l’opzione /QUIT “costringe robocopy a terminare l’elaborazione della riga di comando”. Tuttavia, sarebbe meglio spiegato come creare un file di lavoro senza eseguire un lavoro.

Se si utilizza l’opzione /SAVE, verrà eseguito automaticamente anche il lavoro. Non c’è modo di creare un file di lavoro senza prima eseguire il lavoro. È possibile creare il file di lavoro RCJ con un editor di testo o utilizzare robocopy do it aggiungendo /QUIT alla fine.

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

Modifica di un file di lavoro

Poiché i file di lavoro sono solo file di testo, puoi modificarli con il tuo editor di testo preferito o puoi farlo robocopy per te.

È possibile modificare i file di lavoro utilizzando una combinazione di /JOB, /SAVE e /QUIT.

Ad esempio, è possibile escludere tutti i file EXE dal lavoro robocopy salvato in un file di lavoro chiamato backupfiles.rcj. Hai già creato il file di lavoro e non vuoi sovrascrivere l’intera cosa. È possibile aggiungere la nuova opzione come di seguito:

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

Utilizzando più file di lavoro

È anche possibile combinare l’uso di file di lavoro troppo. Quando si specificano più file di lavoro nella stessa esecuzione, tutte le opzioni utilizzate in tale esecuzione verranno combinate insieme.

Ad esempio, forse si dispone di un ampio elenco di file da escludere dal processo di copia backupfiles. Aprire un editor di testo e aggiungere quanto segue per creare un’esclusione.file rcj.

/XF a.exe b.txt c.cer

È quindi possibile escludere questi file dal processo backupfiles in questo modo:

> robocopy /JOB:backupfiles /JOB:exclude

Poiché il file di lavoro backupfiles originale stava già escludendo tutti i file EXE, la sintassi dell’esecuzione precedente sarebbe stata /XF *.exe a.exe b.txt c.cer. Robocopy combina tutte le opzioni in una sola.

Modelli Robocopy e utilizzando le opzioni /NOSD e /NODD

Se stai lavorando con molti file di lavoro, puoi creare file di lavoro per accettare parametri. Robocopy consente di passare i valori dalla riga di comando ai processi quando vengono eseguiti. Un parametro non è un termine robocopy ma si adatta bene a questo scenario.

È possibile creare processi robocopy per accettare i parametri non specificando esplicitamente una directory di origine o di destinazione utilizzando le opzioni /NOSD e /NODD o semplicemente non includendo affatto una directory di origine e di destinazione.

Per un semplice esempio, creare un file di lavoro senza origine o destinazione utilizzando la sintassi seguente. L’intenzione di questo lavoro è copiare tutti i file TXT ed EXE da un’origine a una directory di destinazione.

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

Da solo, questo lavoro non funzionerà mai perché non è specificata alcuna directory di origine o destinazione.

Quando si crea un lavoro senza directory di origine e destinazione, il file del lavoro viene creato automaticamente utilizzando le opzioni /NOSD e /NODD.

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

Le opzioni /NOSD indicano a robocopy che non hai incluso una directory di origine mentre /NODD indica che non hai incluso una directory di destinazione. Questo file di lavoro è un “modello” per altri lavori.

Ma è possibile passare “parametri” a questo file di lavoro per fornire le directory di origine e di destinazione.

Per utilizzare il file di lavoro appena creato per copiare i file da C:\src a C:\dst, è possibile passare queste directory direttamente sulla riga di comando che verrà quindi passata al lavoro.

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

Copia asincrona (Robocopy /MT)

Per impostazione predefinita, robocopy elabora solo un file alla volta. Tuttavia, è possibile forzare robocopy a copiare più file contemporaneamente utilizzando l’opzione /MT.

L’opzione /MT consente di specificare il numero di thread che robocopy utilizzerà per copiare i file. Il massimo è 128.

Puoi usare /MT in questo modo:

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

Ho scelto 32 in questo caso come linea di base. Suggerisco di partire da 32 per vedere come il computer e la rete gestiscono le cose e regolare i thread di conseguenza.

Si noti che se si utilizza /MT, non sarà possibile utilizzare /IPG o /EFSRAW. Per prestazioni migliori, non inviare il registro alla console. Invece, usa /LOG.

Pianificazione di Robocopy

Robocopy ha alcuni modi per pianificare quando viene eseguito.

Usando /RH

Usando l’opzione /RH, puoi dire a robocopy di eseguire solo durante un tempo specifico. Questo è grande se si dispone di una finestra di manutenzione o un momento in cui tutti sono andati a casa per la giornata.

È possibile specificare un’ora di inizio e un’ora di fine nel formato HHMM-HHMM. Ad esempio, per richiamare robocopy ma consentirne l’esecuzione solo tra le ore 17: 00 e le 9: 00 come definito dall’orologio di sistema, eseguire:

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

Vedrai che se invochi robocopy al di fuori di quelle ore, ti dirà l’ora corrente e attendi l’ora di inizio per l’esecuzione.

Robocopy ti dice a che ora inizierà se pianificato
Robocopy ti dice a che ora inizierà se pianificato

È necessario assicurarsi che entrambi i tempi sono in un formato di 24 ore e sono esattamente quattro cifre. La finestra deve essere maggiore di due minuti.

Per impostazione predefinita, l’utilizzo di /RH verificherà l’ora di inizio prima dell’intera esecuzione. Tuttavia, se si dispone di molti file e si ritiene che il processo possa durare più a lungo, è possibile utilizzare l’opzione /PF. /PF costringerà robocopy a controllare la finestra prima di ogni file.

Utilizzando l’utilità di pianificazione

Il log di output

Robocopy restituirà sempre un log di output. Dipende da te se quel registro viene visualizzato tramite stdout sulla console e/o reindirizzato a un file di registro.

Hai molte opzioni quando visualizzi l’output di robocopy.

Interruttore Descrizione Comportamento Predefinito Equivalente Switch Note
/NP Nessun progresso. Sopprime la visualizzazione delle informazioni di avanzamento. Questo può essere utile quando l’output viene reindirizzato a un file.
/unicode Visualizzazione stato di uscita come testo unicode
/LOG:file stato di Uscita del file di registro e sovrascrivere
/UNILOG:file stato di Uscita unicode file di registro e sovrascrivere
/REGISTRO+:file stato di Uscita del file di registro e aggiungere al file di registro esistente
/UNILOG+:file stato di Uscita unicode file di registro e aggiungere al file di registro esistente
/TS Visualizza il timestamp del file per ogni file elaborato.
/FP Sostituisce i nomi di file semplici con i nomi di percorso completi nell’output.
/NS Non mostra le dimensioni dei file.
/NC Nasconde uscita la classe file di Testo “Tag” (Andate qui per maggiori informazioni: https://www.uvm.edu/~gcd/2015/04/robocopy-file-classes/)
/NFL Nasconde i nomi dei file. I guasti sono ancora registrati però. Tutti i file i file eliminati o verrebbero eliminati se / L è stato omesso vengono sempre registrati
/NDL Nasconde l’output dell’elenco delle directory. I percorsi completi dei file vengono emessi per rintracciare più facilmente i file problematici.
/TEE Output finestra di console, così come i file di log
/NJH Nessun lavoro di intestazione
/NJS Nessun lavoro di sintesi
/BYTE Stampa dimensioni in byte
/X Report tutti i file, non solo quelli selezionati & copiato
/V Produce log di output dettagliato, mostrando i file saltati
/ETA Mostra l’ora stimata di arrivo dei file copiati. Vedere l’ora di inizio di ogni copia di file e il tempo stimato di completamento in base al throughput osservato delle copie precedenti. I tempi vengono visualizzati dopo il nome del file nel formato HH: MM- > HH:MM (start – > fine).
/DEBUG debug informazioni sul volume

Limitare Registro di Elementi /NJS e /NJH

per impostazione predefinita, robocopy restituisce due elementi in uscita di un processo di intestazione e di un lavoro di sintesi.

L’intestazione del lavoro è la semplice intestazione ROBOCOPY in alto.

Intestazione lavoro Robocopy
Intestazione lavoro Robocopy

Il riepilogo del lavoro mostra lo stato di riepilogo di tutti i file / cartelle, la quantità di dati trasferiti e l’ora in cui è terminata l’esecuzione.

Robocopy job summary
Robocopy job summary

È possibile nascondere ciascuno di questi elementi utilizzando l’opzione /NJH per nascondere l’intestazione del lavoro e l’opzione /NJS per nascondere il riepilogo del lavoro. È possibile includere una di queste opzioni o entrambi insieme.

Nascondere l'intestazione e il riepilogo del lavoro
Nascondere l’intestazione e il riepilogo del lavoro

Reindirizzamento del registro di output a un file

Se è necessario salvare il registro di output, è possibile reindirizzarlo a un file di testo e/o visualizzarlo sulla console. È possibile farlo utilizzando redirector di output tradizionali come >, >>, PowerShell o l’opzione /LOG.

Per reindirizzare il registro di output a un file utilizzando l’opzione /LOG sovrascrivendo qualsiasi file di registro esistente utilizzare la sintassi /LOG:<filepath> come di seguito. L’unico output che riceverai sulla console è il percorso del file di registro.

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

Se si desidera mantenere il contenuto di qualsiasi file di registro esistente e aggiungere i risultati a un file, è possibile utilizzare l’operatore + come mostrato di seguito.

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

Reindirizzamento del registro di output in un file e visualizzazione sulla console

Se si desidera salvare il registro di output in un file ma vederlo anche sulla console, è possibile utilizzare l’opzione /TEE. Questa opzione fa sì che robocopy scriva l’output nel file di registro mantenendo il comportamento predefinito di restituire l’output alla console.

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

Codici di uscita

Come tutte le altre utilità della riga di comando, robocopy restituisce i codici di uscita in base ai risultati dell’esecuzione. Tutti desideriamo che robocopy esca sempre con successo con un 0 ma ciò non sempre accade.

Di seguito troverai tutto il codice di uscita restituito da robocopy e la loro spiegazione. Qualsiasi codice di uscita maggiore di sette indica almeno un errore durante l’esecuzione.

Codice di uscita Spiegazione
0 Nessuna azione eseguita. Origine e destinazione sono sincronizzate.
1 Almeno un file è stato copiato correttamente.
2 Sono stati rilevati file o directory aggiuntivi. Esaminare registro.
3 Codici di uscita 2 e 1 combinati.
4 Trovati file o directory non corrispondenti. Esaminare registro.
5 Codici di uscita 4 e 1 combinati.
6 Codici di uscita 4 e 2 combinati.
7 Codici di uscita 4, 1 e 2 combinati.
8 Non è stato possibile copiare almeno un file o una directory. Riprovare limite superato. Esaminare registro.
16 Copia fallito catastroficamente.

Si noti che se si sta eseguendo robocopy in un’utilità di terze parti, tale utilità potrebbe pensare che qualsiasi codice di uscita diverso da zero sia un errore. Per evitare ciò, è possibile modificare il codice di uscita su 0 se restituisce 1.

Il codice di uscita del file “extra” di Robocopy è un codice di ritorno comune che significa che un file “extra” si trova nella cartella di destinazione ma non nella cartella di origine. Questo codice esclude gli extra che impediranno eventuali eliminazioni dalla destinazione.

Modifica del codice di uscita in un file batch

Se si esegue robocopy con un file batch, è possibile trovare il valore della variabile %ERRORLEVEL%. Se restituisce 1, utilizzare la parola chiave exit per uscire dallo script con 0.

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

Modifica del codice di uscita in uno script PowerShell

Se si esegue robocopy in uno script PowerShell, è possibile richiamare robocopy con Start-Process utilizzando PassThru per restituire il processo creato e Wait per attendere il completamento di robocopy. È quindi possibile controllare la proprietà ExitCode per un valore pari a 1. Se il codice di uscita è 1, esci dallo script PowerShell con uno 0 usando $host.SetShouldExit().

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

Errori comuni

Se hai a che fare con migliaia di file, sei destinato a incontrare alcuni problemi. Ecco una ripartizione degli errori comuni che ho incontrato

Errore Parametro non valido

Quando vedi un errore che indica un parametro error invalid, questo normalmente significa che hai provato a passare le opzioni a robocopy fuori sequenza in qualche modo. L’errore robocopy invalid parameter 3 è il più comune, a quanto pare.

Un motivo comune per cui si riceve questo errore è quando si specifica una directory di origine o di destinazione con spazi e si dimentica di circondarla di virgolette.

Robocopy Esempi

È possibile costruire le proprie stringhe di robocopy o si può prendere ciò che gli altri hanno imparato e li usa! In questa sezione, tratterò i casi d’uso su come utilizzare robocopy per realizzare varie cose.

Trova la dimensione della directory di una cartella di rete

Collaboratore: northendtroooper (Reddit)

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

Velocemente eliminare il contenuto della cartella (ignorando le autorizzazioni sottocartelle)

Contributore: pizzasteveo (Reddit)

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

l’Esecuzione di file di grandi migrazioni

Contributore: @MySnozzberries (Twitter)

L’obiettivo di questo frammento di codice è per forza la proprietà di tutti i file per gli Amministratori. Aggiungiamo quindi un ACE esplicito per il gruppo Administrators per il pieno controllo su ogni oggetto in modo ricorsivo anche se stiamo impostando anche l’ereditarietà.

Infine, eseguiamo una copia completa di robocopy con DACL alla destinazione con log. Log può quindi essere rivisto per ulteriori problemi di autorizzazione o solo blocchi di file e un altro delta sync può essere eseguita in seguito.

> 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

Forza ricorsivamente il gruppo Administrators come proprietario di tutti i file e le directory. Ci possono essere modi per aggirare questo, ma questo è l’approccio più pesante e di solito il più veloce.

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

Una volta che siamo il proprietario ora possiamo forzare un nuovo ASSO nel DACL per ogni oggetto. Ciò garantisce agli amministratori il pieno controllo con l’ereditarietà abilitata e ricorsivamente attraverso il percorso.

L’impostazione di questo alla radice con ereditarietà coprirebbe l’ambiente, ma quando una condivisione ha il PROPRIETARIO del CREATORE con il pieno controllo (che purtroppo è anche la raccomandazione di Microsoft per cose come file user profile stores), l’utente può disabilitare l’ereditarietà o rimuovere gli ASSI a loro discrezione. Quindi una mano pesante è di solito la soluzione più veloce.

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

Una volta modificati i DACL sulla maggior parte dei file, proviamo a copiare i file in una nuova posizione, comune per cose come le migrazioni di condivisione file. Per questo, stiamo copiando gli elementi in modo ricorsivo e usando l’opzione /SEC per copiare anche i dati/Attributi/Timestamp/DACL.

Quindi registriamo l’operazione con percorsi completi e per tutti gli oggetti (/V interruttore dettagliato) in un registro, in modo da poter correggere il <5% di errori che sono comunemente lunghezza del percorso o blocco file correlati e ottenere più granulare.

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

Si tratta di un semplice framework per la gestione di una migrazione di condivisione di file con un impatto minimo sull’esperienza utente. Migliora anche il controllo che detiene sui dati. Se un cliente ha una forte pratica di governance dei dati in cui la proprietà è gestita correttamente a livello di cartella secondaria, questa diventa una discussione più complicata, ma la maggior parte dei clienti che troviamo sono fortunati ad utilizzare solo l’ereditarietà e gli ASSI basati sul gruppo, quindi questa è la situazione più comune e la correzione da cui iniziamo.

Robocopy Alternative

Robocopy è uno strumento impressionante, ma ci sono così tanti altri strumenti simili ad esso che possono essere di interesse.

  • xxcopy-Una simile utility da riga di comando con tonnellate di opzioni.
  • Copy-Item PowerShell cmdlet – Non quasi come descritto, ma molto più semplice.
  • TreeSize-GUI e utilità scriptable per trovare le informazioni della cartella.

Sommario

Robocopy è un ottimo strumento per copiare grandi insiemi di file. Che tu stia eseguendo una migrazione dei dati, mantenendo le cartelle sincronizzate o semplicemente necessitando di un modo rapido per copiare accuratamente i file, robocopy è un’ottima scelta.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.