Robocopy é uma das utilidades de linha de comando mais utilizadas para copiar grandes volumes de dados no Windows. É uma ferramenta popular devido à sua potência, mas essa potência vem acompanhada de complexidade. Neste guia, vamos desdobrar toda essa complexidade e fornecer um tutorial completo sobre como usar essa ferramenta útil.
Robocopy é uma utilidade de linha de comando do Windows disponível desde o Windows NT. É uma substituição para a menos versátil utilidade xcopy. Permite que você especifique um caminho de unidade ou servidor para copiar/mover arquivos no prompt de comando.
A versão do Robocopy até esta data é a 10.0.18. Esta é a versão na qual realizei meus testes.
O Robocopy oferece uma série de recursos que você pode aproveitar para realizar cópias e movimentações eficientes e rápidas de arquivos. Ele pode:
- Copiar arquivos por uma rede com capacidade de retomada
- Pode pular pontos de junção NTFS que causam falhas geralmente por loops infinitos
- Pode copiar atributos de arquivos e diretórios preservando os carimbos de data/hora
- Pode copiar permissões NTFS, proprietários e informações de auditoria
- Pode copiar carimbos de data/hora de diretórios
- Pode copiar arquivos no modo ‘backup’ para garantir que os arquivos sejam copiados mesmo que os direitos tenham sido negados ao administrador
- Retentativas automáticas
- Pode sincronizar duas pastas
- É inteligente o suficiente para pular arquivos já copiados
- Pode copiar caminhos maiores que o limite de 256 caracteres
- Realizar cópias assíncronas usando sua capacidade de multithreading
- Retorna códigos de saída padronizados para uso em scripts
Como você pode ver, há muito para copiar. Eu quis abranger tudo o que você precisa saber sobre essa ferramenta útil.
Referência de Sintaxe Comum do Robocopy
Por que um post tão longo sobre uma única utilidade? Apenas dê uma olhada nas tabelas abaixo. Você tem muitas opções para copiar ou mover arquivos com o robocopy! Você encontrará mais opções nas seções individuais.
Essas tabelas foram criadas a partir da sintaxe de ajuda retornada por robocopy /?
. Elas foram divididas em seções mais significativas, acrescentadas ao longo do tempo e limpas para fornecer informações mais úteis.
Opções de Origem
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/S | Copy subfolders | |||
/E | Copy subfolders including empty subfolders | |||
/COPY:[DATSOU] | Copy options | /COPY:DAT | D=Data, A=Attributes, T=Timestamps S=Security=NTFS ACLs, O=Owner info, U=aUditing info. File Data (D) always includes file Timestamps (T) | |
/SEC | Copy files with SECurity | /COPY:DATS | ||
/DCOPY:T | Copy directory timestamps | |||
/COPYALL | Copy ALL file info | /COPY:DATSOU | This will prevent dehydrating offline files and will instead copy the file’s tag (on emc VNX/Unity systems at least). This is not officially documented! If dehydration is what you need (reason i found this issue), you can’t copy the ACLs along your files. CREDIT: Monsieurx (Reddit) | |
/NOCOPY | Copy NO file info | useful with /PURGE | ||
/A | Copy only files with the Archive attribute set | |||
/M | like /A, but remove Archive attribute from source files | |||
/LEV:n | Only copy the top n LEVels of the source tree | |||
/MAXAGE:n | MAXimum file AGE – exclude files older than n days/date | |||
/MINAGE:n | MINimum file AGE – exclude files newer than n days/date | If n < 1900 then n = no of days, else n = YYYYMMDD date | ||
/FFT | Assume FAT File Times | 2-second date/time granularity. This replaces NTFS timestamps. Seems to be more reliable when transferring over a network. | ||
/256 | Turn off very long path (> 256 characters) support |
Opções de Destino
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/A+:[RASHCNET] | Set file attribute(s) on destination files + add | |||
/A-:[RASHCNET] | Remove file attribute(s) on destination files | |||
/FAT | Create destination files using 8.3 FAT file names only | |||
/CREATE | Create directory tree structure + zero-length files only | |||
/DST | Compensate for one-hour DST time differences |
Opções de Cópia
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/L | List files only | Don’t copy, timestamp or delete any files | ||
/MOV | Move files | Delete from source after copying | ||
/MOVE | Move files and directories | Delete from source after copying | ||
/sl | Copy file symbolic links instead of the target | |||
/Z | Copy files in restartable mode | Survive a network glitch | ||
/B | Copy files in backup mode | |||
/J | Copy using unbuffered I/O | Recommended for large files | ||
/NOOFFLOAD | Copy files without using the Windows copy offload mechanism | https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831628(v=ws.11) | ||
/EFSRAW | Copy any encrypted files using EFS RAW mode | |||
/TIMFIX | Fix file times on all files, even skipped files | |||
/XO | Exclude older | if destination file exists and is the same date or newer than the source – don’t bother to overwrite it. | ||
/XC | Exclude changed files | |||
/XN | Exclude newer files | |||
/XX | Exclude files present in destination but not source | /XX | ||
/XF file [file]… | Exclude files matching given names/paths/wildcards | |||
/XD dirs [dirs]… | Exclude directories matching given names/paths. | /XF and /XD can be used in combination e.g. ROBOCOPY c:\source d:\dest /XF *.doc *.xls /XD c:\unwanted /S | ||
/IA:[RASHCNETO] | Include files with any of the given attributes | |||
/XA:[RASHCNETO] | Exclude files with any of the given attributes | |||
/IM | Overwrite modified files. This includes the same files with different times. | |||
/IS | Overwrite files even if they are already the same | |||
/IT | Include tweaked files | |||
/XJ | Exclude junction points from source | /XJ | ||
/XJD | Exclude junction points from source directories | |||
/XJF | Exclude junction points from source files | |||
/MAX:n | Exclude files bigger than n bytes | |||
/MIN:n | Exclude files smaller than n bytes | |||
/MAXLAD:n | Exclude files unused since n | |||
/MINLAD:n | Exclude files used since n | If n < 1900 then n = n days, else n = YYYYMMDD date | ||
/MIR | Mirror a directory tree | /PURGE /E | ||
/PURGE | Delete dest files/folders that no longer exist in source | |||
/XL | Exclude files present in source but not destination | |||
/SECFIX | Robocopy /secfix fixes file security on all files, even skipped files. | Specify the type of security information you want to copy by also using one of these options: /COPYALL /COPY:O /COPY:S /COPY:U /SEC | ||
/ZB | Use restartable mode; if access denied use Backup mode |
Opções de Monitoramento
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/R:n | Number of retries on failed copies | /R:1000000 | Always try to set this option. I recommend setting this to 10-20 to not waste time retrying. | |
/W:n | Wait time between retries | /W:30 | Always try to set this option to a lower number to retry more quickly. I suggest 5-10. | |
/REG | Save /R:n and /W:n in the Windows registry as default settings | |||
/RH:hhmm-hhmm | times when new copies can be started | |||
/TBD | Wait for sharenames to be defined | retry error 67 | ||
/PF | Check run hours on a per file (not per pass) basis | |||
/MON:n | Run again when more than n changes seen | |||
/MOT:m | Run again in m minutes, if changed |
Compreensão do Comportamento do Robocopy
I’ve now completely blew your mind with all of the potential syntax options available to you. Let’s now see all of the different combinations of how we can use this syntax.
I could provide you an enormously long list of robocopy commands with an ever-growing number of switches. But I think it’s better to teach you how to fish. Let’s go over how to put sense out of all of these options.
O Robocopy Copia Apenas Diretórios Inteiros
Cada execução do robocopy terá um diretório de origem e um de destino. O Robocopy copia e move arquivos por diretório inteiro. Não é possível explicitamente copiar um único arquivo com o robocopy. Use copy
ou o Copy-Item
do PowerShell para isso.
No entanto, você pode robocopy um único arquivo com o filtro certo, como você aprenderá abaixo. Para robocopy de um único arquivo, especifique o diretório de origem e destino imediatamente seguido pelo nome do arquivo na origem.
A Sintaxe Depende do Ambiente
Além disso, as opções que você fornece ao robocopy dependerão do ambiente. Você precisará responder a algumas perguntas ao tentar descobrir quais opções usar.
- Sempre estará copiando para um diretório vazio?
- É possível que arquivos já existam no diretório de destino?
- Você estará copiando terabytes de dados ou apenas alguns megabytes?
- Você estará copiando arquivos pela rede ou localmente?
- …e mais.
Se não houver arquivos no diretório de destino, você não precisa se preocupar com opções que sobrescrevem arquivos. Se você não estiver copiando arquivos pela rede, não se preocupe com essas opções. Defina explicitamente as circunstâncias atuais e potenciais futuras em que seu ambiente estará.
Reconheça as Opções Padrão
O Robocopy usa muitas opções por padrão. Você pode identificá-las olhando para as tabelas acima. Ele também fornece uma saída útil cada vez que você executa a utilidade.
Como você pode ver abaixo, quando executei o robocopy com suas opções mais básicas (a pasta de origem e de destino), ele usou automaticamente algumas opções. Compreender o comportamento padrão é importante.
Referencie as opções que você vê na saída com as explicações das opções acima e você entenderá exatamente o que o robocopy está fazendo nos bastidores.

Compreendendo o Que os Comandos do Robocopy Podem Fazer
Se você já usou o comando copy
ou os cmdlets Copy-Item
do PowerShell, provavelmente especificou uma origem e um destino e seguiu em frente. Não há muitas opções que você pode configurar lá. Esses comandos do robocopy têm um comportamento padrão.
Mas o robocopy, por outro lado, entende muito mais e oferece a flexibilidade de ajustar o comportamento tanto quanto desejar.
É importante saber que o robocopy não está apenas ciente do conceito de arquivo ou diretório. Há muito mais em um sistema de arquivos do que isso, e o robocopy suporta praticamente tudo.
A file sitting on a filesystem isn’t just a dumb object with a single purpose. There are many different attributes and things that go with the concept of a file. For example, a file has attributes such as:
- a timestamp (written, modified and accessed)
- ACL do NTFS
- um proprietário
- informações de auditoria do NTFS
- sinalizador oculto
- sinalizador arquivado
Ao copiar ou mover um arquivo, você tem a opção de trazer tudo isso junto, se desejar.
Entenda que ao executar o robocopy, você não está apenas copiando um arquivo, você também está potencialmente copiando todas as outras informações com ele. É importante perceber isso e considerar isso nas opções que você fornece ao robocopy.
O Básico: Realizando Cenários de “E Se”
Se você tiver um grande servidor de arquivos em algum lugar que gostaria de migrar e não quiser tomar nenhuma ação ainda, você pode usar o robocopy para retornar o que ele teria feito.
Usando a opção /L
, você pode dizer ao robocopy para enumerar todos os arquivos e/ou pastas que você especificar e retornar uma lista de arquivos que teria copiado/movido.
Você pode usar a opção /L
com qualquer outra opção. Esta é uma ótima maneira de retornar todas as opções que o robocopy teria usado (padrão ou não). Isso lhe dará uma visão geral do que o robocopy fará com as opções que você forneceu.

/L
O Básico: Copiando Arquivos
O uso mais básico do robocopy é usando um diretório de origem e destino sem opções.
Esta opção copiará todos os arquivos (excluindo subpastas) de C:\src para C:\dst.
Você também pode copiar tudo incluindo subpastas (vazias ou não) e permissões NTFS. Isso é, pelo que eu posso perceber, o método para literalmente copiar tudo o que há sobre um diretório de arquivos para outro diretório.
Abaixo, estou copiando todas as ACLs do NTFS, proprietários de arquivos, subpastas (incluindo as vazias) e todos os atributos de arquivos. Tudo isso é possível apenas com a opção /E
para incluir todas as subpastas vazias e /COPYALL
para pegar o resto.
O Básico: Movendo Arquivos
Mover arquivos transfere arquivos de um diretório para outro, assim como a cópia. A única diferença em uma operação de movimentação é que os arquivos de origem são removidos após a cópia.
Para excluir arquivos/diretórios da origem após a cópia, use a opção /MOV
. Isso removerá todos os arquivos no diretório especificado (sem subpastas).
Você também pode usar /MOVE
para mover todos os arquivos e subpastas.
O Básico: Sincronizando Arquivos
O Robocopy permite que você sincronize dois diretórios. Isso significa garantir que todos os arquivos no diretório de destino estejam no diretório de origem e não mais que isso. /MIR
replicará dados copiando todos os arquivos na origem que não estão no destino e excluindo arquivos no destino que não estão na origem. Cuidado!
Copiando Arquivos pela Rede
Se você estiver copiando arquivos pela rede, há algumas opções que você deve considerar.
Robocopy permite que você copie arquivos em modo ‘reiniciável’ usando a opção /Z
. Isso significa que se um arquivo começar a ser copiado e falhar no meio do caminho, a cópia pode ser reiniciada em vez de falhar completamente. A opção /Z
é útil quando a transmissão é interrompida em uma rede.
Aviso: Alguns relataram que o uso de
/Z
reduz o desempenho em 1/4. Me avise sobre suas descobertas.
Você também pode usar a opção /FFT
. Essa opção tem sido conhecida por preservar com mais precisão os carimbos de data e hora dos arquivos ao transferir pela rede. Esta opção utiliza os carimbos de data e hora do sistema de arquivos FAT em vez do NTFS.
Usando /IPG
para Controlar o Intervalo entre Pacotes
Ao copiar arquivos pela rede, você pode usar a opção /IPG
, também conhecida como a opção de intervalo entre pacotes. Esta opção define (em milissegundos) a frequência com a qual o robocopy aguardará antes de enviar novos pacotes.
Sempre use Caminhos UNC, não Letras de Unidade
A reader on Reddit discovered the hard way to not use mapped drives as a destination directory. Instead, always use always use a UNC path. You might run into issues with the 256-character limit if you do. Check out this Microsoft doc for more information.
Modo de Backup do Robocopy (Robocopy /Z
)
O Robocopy possui uma opção (/B
) ou como backup para o modo reiniciável (/ZB
) que copia arquivos em modo de backup. O que é o “modo de backup” de qualquer maneira?
Quando você geralmente copia um arquivo no Windows e encontra um arquivo que requer privilégios administrativos para acessar, você receberá um erro indicando que não tem permissão. Mesmo que você esteja executando como administrador local, o Windows não permitirá o acesso.
AVISO: Houve relatos de volumes de servidor corrompidos ao copiar dados para um servidor Windows Server 2016 com desduplicação ativada. Quando você usa o interruptor
/ZB
, o resultado será uma loja de fragmentos de desduplicação sendo corrompida na pasta System Volume Information. Os arquivos copiados não serão legíveis e gerarão erros ao tentar manipulá-los. Link do Serverfault com mais informações.
O modo de backup é uma maneira de acessar arquivos sem se preocupar com permissões.
O Robocopy usa o modo de backup para usar o SeBackupPrivilege para ler arquivos e o direito do usuário SeRestorePrivilege para acessar quaisquer arquivos necessários. Isso ignora quaisquer ACEs que normalmente impediriam você de acessar esses arquivos.
Os direitos do usuário SeBackupPrivilege e SeRestorePrivilege normalmente são atribuídos a usuários nos grupos Operadores de Backup e Administradores, mas às vezes podem ser removidos. O módulo de backup elimina esse risco e temporariamente concede ao usuário que executa o robocopy esses direitos.
Se você deseja verificar se sua conta de usuário possui esse direito, pode executar whoami /priv
e ambos os direitos devem ser exibidos.
Filtragem de Arquivos e Pastas
A grande maioria das opções disponíveis para você são para excluir arquivos e diretórios de muitas maneiras diferentes. Eu dividi todas as formas pelas quais você pode filtrar ou excluir arquivos e diretórios com base em vários critérios.
Pelo Nome do Arquivo ou Extensão do Arquivo
Filtrar quais arquivos são copiados/movidos em uma chamada robocopy é feito usando curingas. Você pode usar um caractere curinga para filtrar arquivos que correspondam a um nome específico de arquivo ou extensão.
Por exemplo, para copiar apenas arquivos TXT, você pode especificar *.txt.
Se desejar limitar apenas a arquivos que começam com a letra a, você pode usar a*.
Você também pode fornecer vários conjuntos de correspondências de nomes de arquivos, separando-os com um espaço, como mostrado abaixo.
Quando você filtra pelo nome do arquivo, o robocopy mostrará o filtro na saída.

Pelo Nome do Diretório
O Robocopy permite que você filtre itens não apenas pelo arquivo, mas também pelo nome do diretório. Usando robocopy /xd
, você pode excluir certos diretórios que correspondem a um nome específico.
Ao copiar vários diretórios, use o comando /XD
para excluir diretórios da execução.
Pelo Carimbo de Data/Hora do Arquivo/Diretório
Abaixo, você encontrará todas as opções do robocopy que excluirão arquivos e pastas com base em vários atributos de data/hora.
Switch | Explanation |
/DCOPY:T | Copy directory timestamps |
/MAXAGE:n | Exclude files older than n days/date |
/MINAGE:n | Exclude files newer than n days/date |
/XO | If destination file exists and is the same date or newer than the source, don’t overwrite |
/XN | If destination file exists and is the same date or older than the source, don’t overwrite |
Existem duas opções populares a escolher ao filtrar coisas como carimbo de data/hora; /XO
e /MAXAGE
.
/XO
permite excluir arquivos da cópia apenas se forem mais recentes que a origem. Usando a opção /XO
, você pode robocopy apenas os arquivos novos pela data de acesso.
Se você sabe qual é a idade máxima dos arquivos, também pode usar a opção /MAXAGE
. Isso permite que você especifique em formato YYYMMDD a data mais antiga que um arquivo pode ter antes de ser copiado.
Trabalhos do Robocopy
Você viu que dezenas de opções estão disponíveis para você. É fácil para essas opções logo se tornarem difíceis de gerenciar. Felizmente, você tem uma opção melhor do que memorizar e garantir que todas essas opções estejam corretas toda vez.
Os arquivos de trabalho do Robocopy são arquivos de texto contendo uma opção por linha. Você normalmente usará o robocopy para criar esses arquivos de trabalho. Uma vez criados, você pode então usar o robocopy para modificá-los ou um editor de texto simples.
Você tem vários comandos robocopy que funcionam com trabalhos.
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/JOB:jobname | Take parameters from the named job file | |||
/SAVE:jobname | Save parameters to the named job file | |||
/QUIT | Quit after processing command line | Useful for viewing parameters | ||
/NOSD | No source directory is specified | |||
/NODD | No destination directory is specified | |||
/IF | Include the following files |
A typical job file created with robocopy has an RCJ extension and looks like the below snippet. This job file was created by running robocopy C:\src D:\dst /save:myjob
. You can see that you can provide comments in the job file using ::
which is most of what this file has.
Sem comentários, o arquivo só conteria uma opção por linha.
Salvando Arquivos de Trabalho
Salvar um arquivo de trabalho é tão simples quanto adicionar a opção /SAVE:<nome do trabalho>
ao final da sua sintaxe. Substitua <nome do trabalho>
pelo nome do trabalho. A opção /SAVE
criará um arquivo chamado <nome do trabalho>.rcj no diretório onde você executou o robocopy.
Você deve especificar /SAVE
como a última opção. Quaisquer opções especificadas após /SAVE
não serão adicionadas ao arquivo de trabalho. Além disso, observe que mesmo que um arquivo de trabalho existente já exista, o robocopy sempre o sobrescreverá. Faça backup ou controle de versão de seus arquivos de trabalho!
Nota: Se você tentar usar a opção
/MT
ao salvar em um arquivo de trabalho, ela não estará no arquivo de trabalho. Deixe-me saber se você conseguiu fazer isso ser incluído.
Usando Arquivos de Trabalho
Uma vez que um trabalho é salvo em um arquivo de trabalho, você pode então usar a opção /JOB:<nomedotrabalho>
para especificar o arquivo de trabalho a ser lido. O Robocopy lê todos os parâmetros dentro do arquivo de trabalho. Em seguida, executa exatamente como se você tivesse fornecido as opções diretamente na linha de comando.
Criando um Arquivo de Trabalho Sem Executar um Trabalho Usando /QUIT
A finalidade da opção /QUIT
não é óbvia. À primeira vista, você pode pensar que /QUIT
força a execução a sair. Em vez disso, /QUIT
age mais como uma opção para prevenir que um trabalho seja executado em primeiro lugar.
Oficialmente, a opção /QUIT
“força o robocopy a terminar o processamento da linha de comando”. No entanto, seria melhor explicado como criar um arquivo de trabalho sem executar um trabalho.
Se você usar a opção /SAVE
, isso também executará o trabalho automaticamente. Não há como criar um arquivo de trabalho sem primeiro executar o trabalho. Você poderia criar o arquivo de trabalho RCJ com um editor de texto ou você poderia usar o robocopy para fazer isso acrescentando /QUIT
ao final.
Editando um Arquivo de Trabalho
Uma vez que os arquivos de trabalho são apenas arquivos de texto, você poderia editá-los com seu editor de texto favorito ou você poderia fazer o robocopy fazer isso por você.
Você pode editar arquivos de trabalho usando uma combinação de /JOB
, /SAVE
e /QUIT
.
Por exemplo, talvez você gostaria de excluir todos os arquivos EXE do seu trabalho do robocopy salvo em um arquivo de trabalho chamado backupfiles.rcj. Você já criou o arquivo de trabalho e não quer sobrescrever a coisa toda. Você pode adicionar a nova opção como abaixo:
Usando Múltiplos Arquivos de Tarefa
Você pode até mesmo combinar o uso de arquivos de tarefa também. Ao especificar vários arquivos de tarefa na mesma execução, todas as opções usadas nessa execução serão combinadas.
Por exemplo, talvez você tenha uma grande lista de arquivos para excluir de seu trabalho de cópia de backupfiles. Abra um editor de texto e adicione o seguinte para criar um arquivo exclude.rcj.
Você pode então excluir esses arquivos do trabalho de backupfiles assim:
Como o arquivo de trabalho original de backupfiles já estava excluindo todos os arquivos EXE, a sintaxe da execução acima seria /XF *.exe a.exe b.txt c.cer
. O Robocopy combina todas as opções em uma.
Modelos do Robocopy e Uso das Opções /NOSD
e /NODD
Se você estiver trabalhando com muitos arquivos de tarefa, você pode construir arquivos de tarefa para aceitar parâmetros. O Robocopy permite que você passe valores da linha de comando para os trabalhos quando eles são executados. Um parâmetro não é um termo do robocopy, mas se encaixa bem neste cenário.
Você pode construir trabalhos do robocopy para aceitar parâmetros, não especificando um diretório de origem ou destino explicitamente usando as opções /NOSD
e /NODD
ou simplesmente não incluindo um diretório de origem e destino.
Para um exemplo simples, crie um arquivo de tarefa sem origem ou destino usando a sintaxe abaixo. A intenção deste trabalho é copiar todos os arquivos TXT e EXE de uma origem para um diretório de destino.
Por si só, este trabalho nunca funcionará porque não há diretório de origem ou destino especificado.
Quando você cria um trabalho sem diretório de origem e destino, o arquivo de trabalho é automaticamente criado usando as opções /NOSD
e /NODD
.
A opção /NOSD
informa ao robocopy que você não incluiu um diretório de origem, enquanto /NODD
indica que você não incluiu um diretório de destino. Este arquivo de trabalho é um “modelo” para outros trabalhos.
Mas você pode passar “parâmetros” para este arquivo de trabalho para fornecer os diretórios de origem e destino.
Para usar o arquivo de trabalho recém-criado para copiar arquivos de C:\src para C:\dst, você pode passar esses diretórios diretamente na linha de comando, que será então repassada para o trabalho.
Cópia Assíncrona (Robocopy /MT
)
Por padrão, o robocopy processa apenas um arquivo por vez. No entanto, você pode forçar o robocopy a copiar mais arquivos de uma vez usando a opção /MT
.
A opção /MT
permite que você especifique o número de threads que o robocopy usará para copiar arquivos. O máximo é 128.
Você pode usar /MT
assim:
I’ve chosen 32 in this case as a baseline. I suggest starting at 32 to see how your computer and network handle things and adjust the threads accordingly.
Observe que se você usar
/MT
, não será possível usar/IPG
ou/EFSRAW
. Para um melhor desempenho, não envie o log para o console. Em vez disso, use/LOG
.
Agendando o Robocopy
O Robocopy tem algumas maneiras de agendar quando ele é executado.
Usando /RH
Usando a opção /RH
, você pode dizer ao robocopy para rodar apenas durante um horário específico. Isso é ótimo se você tem uma janela de manutenção ou um horário em que todos já foram para casa no final do dia.
Você pode especificar um horário de início e um horário de término no formato HHMM-HHMM. Por exemplo, para invocar o robocopy, mas permitir que ele rode apenas entre as 17h e as 9h, conforme definido pelo relógio do sistema, execute:
Você verá que se invocar o robocopy fora dessas horas, ele informará a hora atual e aguardará o horário de início para rodar.

Você deve garantir que ambos os horários estejam no formato de 24 horas e tenham exatamente quatro dígitos. A janela deve ser maior do que dois minutos.
Por padrão, usar /RH
verificará o horário de início antes de toda a execução. No entanto, se você tiver muitos arquivos e acreditar que o processo pode demorar mais que isso, você pode usar a opção /PF
. /PF
forçará o robocopy a verificar a janela antes de cada arquivo.
Usando o Agendador de Tarefas
O Log de Saída
O robocopy sempre retornará um log de saída. Se esse log será exibido via stdout no console e/ou redirecionado para um arquivo de log, depende de você.
Você tem muitas opções ao exibir a saída do robocopy.
Switch | Explanation | Default Behavior | Equivalent Switch | Notes |
/NP | No progress. Suppresses the display of progress information. This can be useful when output is redirected to a file. | |||
/unicode | Display the status output as unicode text | |||
/LOG:file | Output status to log file and overwrite | |||
/UNILOG:file | Output status to unicode log file and overwrite | |||
/LOG+:file | Output status to log file and append to existing log file | |||
/UNILOG+:file | Output status to unicode log file and append to existing log file | |||
/TS | Displays the file timestamps for every file processed. | |||
/FP | Replaces simple file names with full file pathnames in the output. | |||
/NS | Does not show file sizes. | |||
/NC | Hides output the file class “Text Tags” (Go here for more information: https://www.uvm.edu/~gcd/2015/04/robocopy-file-classes/) | |||
/NFL | Hides file names. Failures are still logged though. Any files files deleted or would be deleted if /L was omitted are always logged | |||
/NDL | Hides output of the directory listing. Full file pathnames are output to more easily track down problematic files. | |||
/TEE | Output to console window, as well as the log file | |||
/NJH | No job header | |||
/NJS | No job summary | |||
/BYTES | Print sizes as bytes | |||
/X | Report all files, not just those selected & copied | |||
/V | Produce verbose output log, showing skipped files | |||
/ETA | Show estimated time of arrival of copied files. See the start time of each file copy and the estimated time of completion based on the observed throughput of previous copies. Times are displayed after the file name in the format HH:MM – > HH:MM (start – > finish). | |||
/DEBUG | Show debug volume information |
Limitando Elementos de Log com /NJS
e /NJH
Por padrão, o robocopy retorna dois elementos em sua saída, um cabeçalho de trabalho e um resumo de trabalho.
O cabeçalho de trabalho é o simples cabeçalho ROBOCOPY no topo.

O resumo do trabalho mostra um status resumido de todos os arquivos/pastas, a quantidade de dados transferidos e o momento em que a execução foi concluída.

Você pode ocultar cada um desses elementos usando a opção /NJH
para ocultar o cabeçalho do trabalho e a opção /NJS
para ocultar o resumo do trabalho. Você pode incluir uma dessas opções ou ambas juntas.

Redirecionando o Log de Saída para um Arquivo
Se precisar salvar o log de saída, você pode redirecioná-lo para um arquivo de texto e/ou exibi-lo no console. Você pode fazer isso usando redirecionadores de saída tradicionais como >
, >>
, PowerShell ou a opção /LOG
.
Para redirecionar o log de saída para um arquivo usando a opção /LOG
sobrescrevendo qualquer arquivo de log existente, use a sintaxe /LOG:<caminho_do_arquivo>
como mostrado abaixo. A única saída que você receberá no console é o caminho para o arquivo de log.
Se desejar manter o conteúdo de qualquer arquivo de log existente e anexar resultados a um arquivo, você pode usar o operador +
, como mostrado abaixo.
Redirecionando o Log de Saída para um Arquivo e Exibindo no Console
Se desejar salvar o log de saída em um arquivo e também vê-lo no console, você pode usar a opção /TEE
. Essa opção faz com que o robocopy escreva a saída no arquivo de log, mantendo ainda o comportamento padrão de retornar a saída para o console.
Códigos de Saída
Assim como outras utilidades de linha de comando, o robocopy retorna códigos de saída dependendo dos resultados da execução. Todos desejamos que o robocopy sempre saia com sucesso, com um 0
, mas nem sempre isso acontece.
Abaixo você encontrará todos os códigos de saída que o robocopy retorna e suas explicações. Qualquer código de saída maior que sete indica pelo menos uma falha durante a execução.
Exit Code | Explanation |
0 | No action performed. Source and destination are synchronized. |
1 | At least one file was copied successfully. |
2 | Extra files or directories were detected. Examine log. |
3 | Exit codes 2 and 1 combined. |
4 | Mismatched files or directories found. Examine log. |
5 | Exit codes 4 and 1 combined. |
6 | Exit codes 4 and 2 combined. |
7 | Exit codes 4, 1 and 2 combined. |
8 | At least one file or directory could not be copied. Retry limit exceeeded. Examine log. |
16 | Copy failed catastrophically. |
Observe que se você estiver executando o robocopy em uma utilidade de terceiros, essa utilidade pode considerar qualquer código de saída diferente de zero como uma falha. Para evitar isso, você pode alterar o código de saída para 0 se ele retornar 1.
O código de saída de arquivo “extra” do Robocopy é um código de retorno comum que significa que um arquivo “extra” está na pasta de destino, mas não na pasta de origem. Este código exclui extras que impedirão exclusões na pasta de destino.
Alterando o Código de Saída em um Arquivo em Lote
Se você estiver executando o robocopy com um arquivo em lote, você pode encontrar o valor da variável %ERRORLEVEL%
. Se ele retornar 1, então use a palavra-chave exit
para sair do script com 0.
Alterando o Código de Saída em um Script do PowerShell
Se você estiver executando o robocopy em um script do PowerShell, você pode invocar o robocopy com Start-Process
usando PassThru
para retornar o processo criado e Wait
para esperar o término do robocopy. Então você pode verificar a propriedade ExitCode
para um valor de 1. Se o código de saída for 1, então saia do script do PowerShell com 0 usando $host.SetShouldExit()
.
Erros Comuns
Se você estiver lidando com milhares de arquivos, é provável que encontre alguns problemas. Aqui está uma análise dos erros comuns que encontrei
Erro de Parâmetro Inválido
Quando você vê um erro indicando erro de parâmetro inválido, isso normalmente significa que você tentou passar opções para o robocopy de alguma forma fora de sequência. O erro robocopy parâmetro inválido 3 é o mais comum, parece.
A common reason you’d receive this error is when you specify a source or destination directory with spaces and forget to surround it with quotes.
Exemplos de Robocopy
Você pode construir suas próprias sequências de robocopy ou pode pegar o que outros aprenderam e usá-las! Nesta seção, vou abordar casos de uso sobre como usar o robocopy para realizar várias coisas.
Encontre o tamanho do diretório de uma pasta de rede
Contribuidor: northendtroooper (Reddit)
Exclua rapidamente o conteúdo da pasta (ignorando permissões em subpastas)
Contribuidor: pizzasteveo (Reddit)
Realizando migrações de arquivos grandes
Contribuidor: @MySnozzberries (Twitter)
O objetivo deste trecho é forçar a propriedade de todos os arquivos de volta para Administradores. Em seguida, adicionamos um ACE explícito para o grupo Administradores para controle total em cada objeto recursivamente, mesmo que também estejamos definindo a herança.
Finalmente, fazemos uma cópia completa do robocopy com DACLs para o destino com log. O log pode então ser revisado quanto a problemas adicionais de permissão ou apenas bloqueios de arquivos, e uma outra sincronização delta pode ser realizada posteriormente.
Recursivamente force o grupo de Administradores como proprietário de todos os arquivos e diretórios. Pode haver maneiras de contornar isso, mas esta é a abordagem mais incisiva e geralmente a mais rápida.
Uma vez que somos os proprietários, agora podemos forçar uma nova ACE no DACL para cada objeto. Isso concede controle total aos Administradores com a herança habilitada e recursiva pelo caminho.
Definir isso na raiz com herança cobriria o ambiente, mas quando um compartilhamento tem CREATOR OWNER com Controle Total (infelizmente, até mesmo a recomendação da Microsoft para coisas como perfis de usuário de arquivo), o usuário pode desabilitar a herança ou remover ACEs a seu critério. Portanto, uma abordagem direta é geralmente a solução mais rápida.
Depois de alterarmos os DACLs na maioria dos arquivos, tentamos copiar os arquivos para um novo local, comum para migrações de compartilhamento de arquivos. Para isso, estamos copiando os itens recursivamente e usando a opção /SEC
para também copiar os Dados/Atributos/Timestamps/DACLs.
Em seguida, registramos a operação com caminhos completos e para todos os objetos (opção /V
verbose) em um log, para que possamos remediar os <5% de erros que são comumente relacionados ao comprimento do caminho ou bloqueio de arquivo e obter mais detalhes.
Este é um framework simples para gerenciar uma migração de compartilhamento de arquivos com impacto mínimo na experiência do usuário. Também melhora o controle que a TI exerce sobre os dados. Se um cliente possui uma prática forte de governança de dados, onde a propriedade é gerenciada adequadamente em nível de pasta filha, isso se torna uma discussão mais complicada, mas a maioria dos clientes que encontramos tem sorte de estar usando apenas herança e ACEs baseadas em grupo, então esta é a situação e solução mais comum com a qual começamos.
Alternativas ao Robocopy
O Robocopy é uma ferramenta incrível, mas existem muitas outras ferramentas semelhantes que podem ser do seu interesse.
- xxcopy – Uma utilidade de linha de comando semelhante com toneladas de opções.
- Cmdlet PowerShell Copy-Item – Não tão completo, mas muito mais simples.
- TreeSize – Utilidade com interface gráfica e scriptável para encontrar informações de pastas.
Resumo
O Robocopy é uma excelente ferramenta para copiar grandes conjuntos de arquivos. Seja para migração de dados, manter pastas sincronizadas ou simplesmente precisar de uma maneira rápida de copiar arquivos com precisão, o robocopy é uma ótima escolha.