lunedì 18 agosto 2025

Windows: Robocopy

La gestione dei dati è fondamentale, che si tratti di un semplice backup di documenti personali o della migrazione di un'intera infrastruttura aziendale, la capacità di spostare e copiare file in modo efficiente, affidabile e veloce è cruciale. Sebbene l'interfaccia grafica di Esplora file sia più che sufficiente per le attività quotidiane, Windows offre uno strumento a riga di comando che rappresenta la scelta preferita per i professionisti IT e gli utenti avanzati: Robocopy.

Robocopy, abbreviazione di "Robust File Copy", è un'utility a riga di comando integrata in tutti i sistemi operativi Windows moderni.  Il suo scopo principale è quello di copiare file e directory da una posizione all'altra, ma con una serie di funzionalità avanzate che lo distinguono da comandi più semplici come `copy` o `xcopy`. La sua "robustezza" deriva dalla capacità di riprendere le operazioni interrotte, di gestire la copia di permessi e attributi, e di operare in modalità specchio (mirroring) per sincronizzare il contenuto di due cartelle in modo bidirezionale.

I vantaggi nell'utilizzo di Robocopy sono
  • Robustezza: Se la copia viene interrotta a causa di un problema di rete o di un errore, Robocopy può riprendere da dove si era fermato, senza dover ricominciare tutto da capo. L'opzione `/Z` (restartable mode) è il cuore di questa funzionalità.
  • Velocità: Con l'opzione di copia multi-thread, Robocopy può copiare file in parallelo, migliorando notevolmente la velocità di trasferimento, specialmente su collegamenti veloci e con tanti file piccoli.
  • Controllo Granulare: Si ha un controllo granulare su cosa viene copiato, escluso o modificato. É possibile specificare se copiare sottocartelle vuote, escludere file per nome o dimensione, o mantenere attributi e permessi.
  • Automazione: Essendo un'utility a riga di comando, Robocopy si presta perfettamente all'uso in script e file batch per automatizzare le operazioni di backup e sincronizzazione, rendendole ripetibili e programmate.

Per utilizzare Robocopy si consiglia di aprire il Prompt dei comandi con privilegi amministrativi. L'uso dei privilegi amministrativi garantisce che Robocopy possa superare eventuali restrizioni di accesso ai file (a meno che non si utilizzino opzioni specifiche come `/b` per la modalità backup).

Sintassi e Parametri Fondamentali

La sintassi di base di robocopy è semplice ma potente:
robocopy <origine> <destinazione> [<file>[ ...]] [<opzioni>]
  • <origine>: Specifica il percorso della directory da cui vuoi copiare.
  • <destinazione>: Specifica il percorso della directory dove vuoi copiare i file.
  • [<file>[ ...]]: Il nome del file o dei file da copiare. I caratteri jolly (`*` e `?`) sono supportati. Se omesso, Robocopy copierà tutti i file (`*.*`).
  • [<opzioni>]: Le opzioni di comando che definiscono il comportamento di Robocopy.

Per esempio, per copiare il file `report.zip` dalla cartella `c:\reports` alla condivisione di rete `\\backup\reports` in modalità multi-thread e riavviabile, il comando sarà:
robocopy c:\reports "\\backup\reports" report.zip /mt /z


Opzioni di Copia Essenziali


Opzione Descrizione
/s
Copia le sottodirectory, ma esclude quelle vuote.
/e
Copia le sottodirectory, incluse quelle vuote. Questa è l'opzione più comune per la copia completa di una cartella.
/lev:<n>
Copia solo i primi n livelli dell'albero delle directory di origine.
/z
Copia i file in modalità riavviabile. In modalità riavviabile, in caso di interruzione di una copia di file, robocopy può riprendere la posizione in cui è stata interrotta invece di ricopiare l'intero file.
/b
Copia i file in modalità di backup. In modalità di backup robocopy esegue l'override delle impostazioni di autorizzazione per file e cartelle (ACL), che potrebbero altrimenti bloccare l'accesso.
/zb
Copia i file in modalità riavviabile. Se l'accesso ai file viene negato, passa alla modalità di backup.
/j
Copia con I/O senza buffer (scelta consigliata per file di grandi dimensioni).
/efsraw
Copia tutti i file crittografati in modalità RAW EFS.
/j
Copia con I/O senza buffer (scelta consigliata per file di grandi dimensioni).
/copy:<copyflags>
Specifica le proprietà del file da copiare. I valori validi per questa opzione sono:
D - Data
A - Attributes
T - Time stamps
X - Skip alt data streams
S - NTFS access control list (ACL)
O - Owner information
U - Auditing information

Il valore predefinito per l'opzione /COPY è DAT (dati, attributi e timestamp). Il flag X viene ignorato se si utilizza /B o /ZB.
/dcopy:<copyflags>
Specifica cosa copiare nelle directory. I valori validi per questa opzione sono:
D - Data
A - Attributes
T - Time stamps
E - Extended attribute
X - Skip alt data streams
Il valore predefinito per questa opzione è DA (dati e attributi).
/sec
Copia i file con sicurezza (equivalente a /copy:DATS).
/copyall
Copia tutte le informazioni del file (equivalente a /copy:DATSOU).
/nocopy
Non copia le informazioni sui file (utile con /purge).
/secfix
Consente di correggere la sicurezza in tutti i file, anche quelli ignorati.
Quando si utilizza l'opzione di copia /secfix, specificare il tipo di informazioni di sicurezza che si desidera copiare, utilizzando una delle seguenti opzioni di copia aggiuntive:
/copyall
/copy:o
/copy:s
/copy:u
/sec
/timfix
Consente di correggere gli orari in tutti i file, anche quelli ignorati.
/purge
Elimina i file e le directory di destinazione che non esistono più nell'origine. Utilizzando questa opzione con l'opzione /e e una directory di destinazione, è possibile evitare la sovrascrittura delle impostazioni di sicurezza della directory di destinazione.
/mir
Esegue il mirroring di una struttura di directory (equivalente a /e più /purge). Utilizzando questa opzione con l'opzione /e e una directory di destinazione, sovrascrive le impostazioni di sicurezza della directory di destinazione.
/mov
Sposta i file ed elimina i file dall'origine dopo la copia.
/move
Sposta i file e le directory ed elimina i file dall'origine dopo la copia.
/a+:[RASHCNET]
Aggiunge gli attributi specificati ai file copiati. I valori validi per questa opzione sono:
R - Read only
A - Archive
S - System
H - Hidden
C - Compressed
N - Not content indexed
E - Encrypted
T - Temporary
/a-:[RASHCNETO]
Rimuove gli attributi specificati dai file copiati. I valori validi per questa opzione sono:
R - Read only
A - Archive
S - System
H - Hidden
C - Compressed
N - Not content indexed
E - Encrypted
T - Temporary
O - Offline
/create
Crea solo un albero di directory e file di lunghezza zero.
/fat
Crea file di destinazione usando solo nomi di file FAT di lunghezza di 8,3 caratteri.
/256
Disattiva il supporto per i percorsi con più di 256 caratteri.
/mon:<n>
Monitora la fonte e si riavvia quando vengono rilevate più di n modifiche.
/mot:<m>
Monitora la fonte e si riavvia dopo m minuti se vengono rilevate modifiche.
/rh:hhmm-hhmm
Specifica i tempi di esecuzione in cui è possibile avviare nuove copie.
/pf
Controlla i tempi di esecuzione per ogni file (non per passaggio).
/ipg:<m>
Specifica il divario tra pacchetti per liberare la larghezza di banda nelle linee lente.
/sj
Copia le giunzioni (collegamenti flessibili) nel percorso di destinazione anziché le destinazioni di collegamento.
/sl
Non seguire i collegamenti simbolici e creare invece una copia del collegamento.
/mt:<m>
Crea copie multithread con n thread. n deve essere un numero intero compreso tra 1 e 128. Il valore predefinito per n è 8. Per ottenere prestazioni migliori, reindirizzare l'output utilizzando l'opzione /log.
Il parametro /mt non può essere utilizzato con i parametri /ipg e /efsraw.
/nodcopy
Non copia le informazioni della directory (viene eseguita l'operazione predefinita /dcopy:DA).
/nooffload
Copia i file senza usare il meccanismo di offload copia di Windows.
/compress
Richiede la compressione di rete durante il trasferimento di file, se applicabile.
/sparse:<y|n>
Abilita o disabilita la conservazione dello stato sparse dei file durante il processo di copia. Se non viene selezionata alcuna opzione, l'impostazione predefinita è sì (abilitato).
/noclone
Non tenta di bloccare la clonazione come ottimizzazione.


Copiare le opzioni di limitazione dei file

Queste opzioni di limitazione vengono usate per specificare la larghezza di banda di I/O massima che Robocopy consente di usare in byte al secondo.  Se non si specifica il valore in byte al secondo, è possibile utilizzare numeri interi se si specificano k, m o g. La larghezza di banda I/O minima limitata è 524288 byte anche se si specifica un valore inferiore.
Opzione Descrizione
/iomaxsize:<n>[kmg]
La dimensione massima richiesta per ciclo di lettura/scrittura in kilobyte, megabyte o gigabyte.
/iorate:<n>[kmg]
La velocità di I/O richiesta in kilobyte, megabyte o gigabyte al secondo.
/threshold:<n>[kmg]
La soglia della dimensione del file per la limitazione in kilobyte, megabyte o gigabyte


Opzioni di selezione file

Opzione Descrizione
/a
Copia solo i file per i quali è impostato l'attributo Archivio.
/m
Copia solo i file per i quali è impostato l'attributo Archivio e reimposta l'attributo Archivio.
/ia:[RASHCNETO]
Include solo i file per i quali sono impostati gli attributi specificati. I valori validi per questa opzione sono:
R - Read only
A - Archive
S - System
H - Hidden
C - Compressed
N - Not content indexed
E - Encrypted
T - Temporary
O - Offline
/xa:[RASHCNETO]
Esclude solo i file per i quali sono impostati gli attributi specificati. I valori validi per questa opzione sono:
R - Read only
A - Archive
S - System
H - Hidden
C - Compressed
N - Not content indexed
E - Encrypted
T - Temporary
O - Offline
/xf [ ...]
Esclude i file che corrispondono ai nomi o ai percorsi specificati. Sono supportati i caratteri jolly (* e ?).
/Xd [ ...]
Esclude le directory che corrispondono ai nomi e ai percorsi specificati.
/xc
Esclude i file esistenti con lo stesso timestamp, ma dimensioni di file diverse.
/xn
I file di directory di origine più recenti rispetto alla destinazione vengono esclusi dalla copia.
/xo
I file della directory di origine precedente a quella di destinazione vengono esclusi dalla copia.
/xx
Esclude file e directory aggiuntivi presenti nella destinazione, ma non nell'origine. L'esclusione di file aggiuntivi non elimina i file dalla destinazione.
/xl
Esclude file e directory "solitari" presenti nell'origine ma non nella destinazione. L'esclusione di file solitari impedisce l'aggiunta di nuovi file alla destinazione.
/im
Includere i file modificati (tempi di modifica diversi).
/is
Include gli stessi file. Gli stessi file sono identici per nome, dimensioni, orario e tutti gli attributi.
/it
Include file "modificati". I file modificati hanno lo stesso nome, dimensioni e orario, ma attributi diversi.
/max:<n>
Specifica la dimensione massima del file (per escludere i file più grandi di n byte).
/min:<n>
Include file "modificati". I file modificati hanno lo stesso nome, dimensioni e orario, ma attributi diversi.
/maxage:<n>
Specifica l'età massima dei file per escludere i file più vecchi di n giorni o una data basata sull'ultima modifica dei file.
/minage:<n>
Specifica l'età minima dei file per escludere quelli più recenti di n giorni o una data basata sull'ultima modifica dei file.
/maxlad:<n>
Specifica la data massima dell'ultimo accesso (esclude i file inutilizzati da n).
/minlad:<n>
Specifica la data minima dell'ultimo accesso (esclude i file utilizzati dopo n). Se n è inferiore a 1900, n specifica il numero di giorni. Altrimenti, n specifica una data nel formato YYYYMMDD.
/xj
Esclude i punti di giunzione, che vengono normalmente inclusi per impostazione predefinita.
/fft
Presuppone i tempi dei file FAT (precisione di due secondi).
/dst
Compensa le differenze di tempo di un'ora DST.
/xjd
Esclude i punti di giunzione per le directory.
/xjf
Esclude i punti di giunzione per i file.


Opzioni di riprova

Opzione Descrizione
/r:<n>
Specifica il numero di tentativi per le copie non riuscite. Il valore predefinito di n è 1.000.000 (un milione di tentativi).
/w:<n>
Specifica il tempo di attesa tra i tentativi, in secondi. Il valore predefinito di n è 30 (tempo di attesa 30 secondi).
/reg
Salva i valori specificati nelle opzioni /r e /w come impostazioni predefinite nel Registro di sistema.
/tbd
Specifica che il sistema attende che i nomi delle condivisioni vengano definiti (errore di ripetizione del tentativo 67).
/lfsm
Funziona in modalità di spazio libero insufficiente che consente la copia, la pausa e la ripresa
/lfsm:<n>[kmg]
Specifica le dimensioni del pavimento in n kilobyte, megabyte o gigabyte.

Opzioni di registrazione (Log)
L'opzione di logging è cruciale per la verifica e l'automazione.

Opzione Descrizione
/l
Specifica che i file devono essere solamente elencati (e non copiati, eliminati o contrassegnati come timestamp).
/x
Segnala tutti i file aggiuntivi, non solo quelli selezionati.
/v
Produce un output dettagliato e mostra tutti i file ignorati.
/ts
Include i timestamp dei file di origine nell'output.
/fp
Include i nomi completi dei percorsi dei file nell'output.
/bytes
Stampa le dimensioni come byte.
/ns
Specifica che le dimensioni dei file non devono essere registrate.
/nc
Specifica che le classi dei file non devono essere registrate.
/nfl
Specifica che i nomi dei file non devono essere registrati.
/ndl
Specifica che i nomi di directory non devono essere registrati.
/np
Specifica di non visualizzare lo stato di avanzamento dell'operazione di copia (il numero di file o directory copiati finora).
/eta
Mostra il tempo stimato di arrivo (ETA) dei file copiati.
/log:<logfile>
Scrive l'output di stato nel file di log sovrascrivendo il file di log esistente.
/log+:<logfile>
Scrive l'output dello stato nel file di registro (aggiunge l'output al file di registro esistente).
/unilog:<logfile>
Scrive l'output dello stato nel file di registro come testo Unicode (sovrascrive il file di registro esistente).
/unilog+:<logfile>
Scrive l'output dello stato nel file di registro come testo Unicode (aggiunge l'output al file di registro esistente).
/tee
Scrive l'output dello stato nella finestra della console e nel file di registro.
/njh
Specifica che non è presente alcuna intestazione del processo.
/njs
Specifica che non è presente alcun riepilogo del lavoro.
/unicode
Visualizza l'output dello stato come testo Unicode.

Opzioni processo (Job)

Opzione Descrizione
/job:<jobname>
Specifica che i parametri devono essere derivati dal file di processo denominato. Per eseguire /job:jobname, è prima necessario eseguire il parametro /save:jobname per creare il file di processo.
/save:<jobname>
Specifica che i parametri devono essere salvati nel file di processo denominato. Questa operazione deve essere eseguita prima di eseguire /job:jobname. Tutte le opzioni di copia, ripetizione e registrazione devono essere specificate prima di questo parametro.
/quit
Esce dopo l'elaborazione della riga di comando (per visualizzare i parametri).
/nosd
Indica che non è specificata alcuna directory di origine.
/nodd
Indica che non è specificata alcuna directory di destinazione.
/if
Include i file specificati.


Codici di Uscita (Return Codes)

Al termine di un'operazione, Robocopy restituisce un codice numerico che può essere catturato da script batch per prendere decisioni.
Valore Descrizione
0
Nessun file copiato. Non è stato rilevato alcun errore. Nessun file non corrispondente. I file esistono già nella directory di destinazione, pertanto, l'operazione di copia è stata ignorata.
1
Tutti i file sono stati copiati correttamente.
2
Nella directory di destinazione sono presenti alcuni file aggiuntivi che non sono presenti nella directory di origine. Nessun file copiato.
3
Alcuni file sono stati copiati. Erano presenti file aggiuntivi. Non è stato rilevato alcun errore.
5
Alcuni file sono stati copiati. Alcuni file non corrispondono. Non è stato rilevato alcun errore.
6
Esistono file aggiuntivi e file non corrispondenti. Non sono stati copiati file e non sono stati rilevati errori, il che significa che i file esistono già nella directory di destinazione.
7
I file sono stati copiati, erano presenti una mancata corrispondenza dei file e file aggiuntivi.
8
Diversi file non sono stati copiati.

Qualsiasi valore uguale o maggiore di 8 indica che si è verificato almeno un errore durante l'operazione di copia.

Note

  • L'utilizzo di /PURGE o /MIR nella directory radice del volume in precedenza causava l'applicazione dell'operazione richiesta da parte di robocopy anche ai file all'interno della directory System Volume Information. Questo non è più il caso come se sia specificato, robocopy ignora tutti i file o le directory con tale nome nelle directory di origine e di destinazione di primo livello della sessione di copia.
  • La classificazione dei file modificati si applica solo quando i file system di origine e di destinazione supportano timestamp di modifica, ad esempio NTFS, e i file di origine e di destinazione hanno tempi di modifica diversi, ma per il resto sono gli stessi. Questi file non vengono copiati per impostazione predefinita. Specificare /IM per includerli.
  • Il flag /DCOPY:E richiede che venga tentata la copia estesa degli attributi per le directory. Robocopy continua l'operazione di copia anche se non è stato possibile copiare le EA di una directory. Questo flag non è incluso in /COPYALL.
  • Se si specifica /IoMaxSize o /IoRate, robocopy abilita la limitazione dei file di copia per ridurre il carico del sistema. Entrambi possono essere modificati in valori ottimali e parametri di copia, ma il sistema e robocopy sono autorizzati a modificarli in base ai valori consentiti in funzione delle esigenze.
  • Se si utilizza /Threshold, viene specificata una dimensione minima del file per l'attivazione della limitazione. I file al di sotto delle dimensioni non vengono limitati. I valori per tutti e tre i parametri possono essere seguiti da un carattere di suffisso facoltativo, ad esempio [KMG] (kilobyte, megabyte, gigabyte).
  • L'utilizzo di /LFSM richiede che robocopy funzioni in "modalità spazio libero insufficiente". In questa modalità robocopy si sospende ogni volta che una copia di file causa lo spazio disponibile del volume di destinazione al di sotto di un valore "floor". Questo valore può essere specificato in modo esplicito utilizzando il flag /LFSM:n[KMG].
  • Se si specifica /LFSM senza alcun valore di piano esplicito, il piano viene impostato su 10% delle dimensioni del volume di destinazione. La modalità di spazio libero insufficiente non è compatibile con /MT e /EFSRAW.


Esempi


Esempio 1 - Copia Base con Log
Questo comando copia tutti i file e le sottodirectory, comprese quelle vuote, da una cartella di origine a una di destinazione. Inoltre, crea un file di log per registrare l'operazione, permettendo di verificarne l'integrità successivamente.
robocopy C:\Users\Admin\Records D:\Backup /E /ZB /LOG:C:\Logs\Backup.log
  • robocopy C:\Users\Admin\Records D:\Backup: Indica l'origine (C:\...) e la destinazione (D:\...).
  • /E: Copia le sottodirectory, comprese quelle vuote.
  • /ZB: Usa la modalità di backup. Se l'utente non ha i permessi completi, prova a usare la modalità di backup per garantire la copia di tutti i file.
  • /LOG:C:\Logs\Backup.log: Crea un file di log chiamato Backup.log nel percorso specificato. Se il file esiste, lo sovrascrive. Usa /LOG+ per aggiungere al file di log esistente.

Esempio 2 - Mirroring (Sincronizzazione)
Questa opzione esegue il "mirroring" di una cartella, rendendo la destinazione una copia esatta dell'origine. I file nella destinazione che non esistono nell'origine vengono eliminati, garantendo una sincronizzazione perfetta.
robocopy C:\Users\Admin\Records D:\Backup /MIR /R:2 /W:5 /LOG:C:\Logs\Backup.log
  • /MIR: Esegue il mirroring. Attenzione: questo parametro elimina i file nella destinazione che non sono presenti nell'origine.
  • /R:2: Imposta 2 tentativi in caso di errori di copia.
  • /W:5: Imposta un'attesa di 5 secondi tra i tentativi.

Esempio 3 - Copia con Multithreading
Questo comando copia file e sottodirectory non vuote, mantenendo i metadati originali (data, attributi, timestamp). L'uso del multithreading accelera notevolmente il processo, specialmente con un gran numero di file piccoli.
robocopy C:\Users\Admin\Records D:\Backup /S /E /COPY:DAT /MT:16 /LOG:C:\Logs\Backup.log
  • /S: Copia le sottodirectory, ma non quelle vuote.
  • /COPY:DAT: Preserva i dati (D), gli attributi (A) e i timestamp (T) dei file.
  • /MT:16: Utilizza 16 thread per la copia. Si possono specificare da 1 a 128 thread.

Esempio 4 -  Spostamento di File (Taglia e Incolla)
A differenza della copia, lo spostamento sposta i file e le cartelle dall'origine alla destinazione. Questa opzione è utile per trasferire dati e liberare spazio nell'origine.
robocopy C:\Users\Admin\Records D:\Backup /S /MAXAGE:7 /MOV /LOG:C:\Logs\Backup.log
  • /MOV: Sposta i file, cancellandoli dall'origine dopo la copia.
  • /MAXAGE:7: Sposta solo i file che sono stati modificati negli ultimi 7 giorni.

Esempio 5 - Sincronizzazione Aggressiva
Questo comando combina l'opzione di eliminazione di file obsoleti (/PURGE) con la visualizzazione di un tempo stimato per ogni file (/ETA). È un'opzione di sincronizzazione più aggressiva del mirroring.
robocopy C:\Users\Admin\Records D:\Backup /ETA /PURGE /LOG:C:\Logs\Backup.log
  • /PURGE: Elimina file e directory dalla destinazione se non esistono più nell'origine. È simile a /MIR ma non copia i permessi di sicurezza dei file.
  • /ETA: Mostra il tempo stimato per il completamento della copia per ogni file.

Esempio 6 - Limitazione della Velocità di I/O
Questo è utile per evitare che il processo di copia sovraccarichi la rete o il disco, rendendolo più gestibile in contesti dove la banda è limitata.
robocopy C:\Records D:\Backup /iorate:1m
  • /iorate:1m: Limita la velocità di I/O a 1 megabyte al secondo. Si possono usare vari suffissi (K per kilobyte, M per megabyte, G per gigabyte).

Esempio 7 - Evitare la Copia di File Esistenti
Questo comando è utile per un aggiornamento selettivo. Robocopy ignora i file che esistono già nella destinazione, indipendentemente dalla loro data di modifica.
robocopy C:\Source C:\Destination /XC /XN /XO
  • /XC: Esclude i file che sono cambiati (stesso nome, contenuto diverso).
  • /XN: Esclude i file nuovi (esistono nella sorgente ma non nella destinazione).
  • /XO: Esclude i file obsoleti (esistono nella destinazione ma non nella sorgente).



Nessun commento:

Posta un commento

I messaggi sono soggetti a moderazione da parte dell'amministratore prima della loro pubblicazione.