Robocopy é uma das utilidades de linha de comando mais usadas para copiar grandes volumes de dados no Windows. É uma ferramenta tão popular devido à sua poderosa funcionalidade. No entanto, toda essa potência traz consigo 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 que está 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 caminho de servidor para copiar/mover arquivos no prompt de comando.
A versão do Robocopy até o momento desta escrita é 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 pela rede com capacidade de retomada
- Pode pular pontos de junção NTFS, evitando falhas geralmente causadas por loops infinitos
- Pode copiar atributos de arquivo e diretório preservando 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 sejam copiados mesmo que os direitos tenham sido negados ao administrador
- Tentativas automáticas de recuperação
- 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 queria abranger tudo 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 ferramenta? 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 construídas a partir da sintaxe de ajuda retornada por robocopy /?
. Elas foram divididas em seções mais significativas, adicionadas 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 |
Compreendendo o 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 Apenas Copia Diretórios Inteiros
Cada execução do robocopy terá um diretório de origem e um diretório 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 Copy-Item
do PowerShell para isso.
No entanto, você pode usar o robocopy para copiar um único arquivo com o filtro correto, como você aprenderá abaixo. Para copiar um único arquivo com o robocopy, especifique os diretórios de origem e destino seguidos imediatamente 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.
- Você 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 futuras potenciais 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 toda vez que você executa a utilidade.
Você pode ver abaixo que quando executei o robocopy com suas opções mais básicas (a pasta de origem e de destino), ele usou automaticamente algumas opções. Entender o comportamento padrão é importante.
Referencie as opções que você vê na saída com as explicações de opções acima e você entenderá exatamente o que o robocopy está fazendo por baixo dos panos.

Entendendo o que os Comandos do Robocopy podem Fazer
Se você já usou os comandos copy
ou Copy-Item
do PowerShell, provavelmente especificou uma origem e um destino e seguiu em frente com seu dia. 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 para ajustar o comportamento tanto quanto desejar.
É importante saber que o robocopy não apenas entende o 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 NTFS
- um proprietário
- informações de auditoria NTFS
- sinalizador oculto
- sinalizador arquivado
Ao copiar ou mover um arquivo, você tem a opção de trazer todas essas informações junto, se desejar.
Entenda que, quando você executa o robocopy, você não está apenas copiando um arquivo, mas também potencialmente copiando todas as outras informações junto com ele. É importante perceber isso e levar isso em consideração nas opções que você fornece ao robocopy.
O básico: Realizando cenários de simulação
Se você possui um servidor de arquivos enorme em algum lugar que deseja migrar e não deseja 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 dos arquivos que ele 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 é usar um diretório de origem e um diretório de destino sem opções.
Essa opção irá 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 posso entender, o método para literalmente copiar tudo o que há em 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 arquivo. Tudo isso é possível apenas com a opção /E
para incluir todas as subpastas vazias e /COPYALL
para pegar o restante.
O básico: Movendo Arquivos
Mover arquivos transfere arquivos de um diretório para outro, assim como a cópia faz. A única diferença com 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 nada mais. /MIR
irá replicar a cópia de dados de todos os arquivos na origem que não estão no destino e excluir arquivos no destino que não estão na origem. Cuidado!
Copiar Arquivos em uma Rede
Se você estiver copiando arquivos em uma rede, existem 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 recomeçar em vez de falhar completamente. A opção /Z
é útil quando a conexão é interrompida em uma rede.
Aviso: Alguns relataram que o uso de
/Z
reduz o desempenho em 1/4. Compartilhe suas descobertas.
Você também pode usar a opção /FFT
. Este interruptor é conhecido por preservar mais precisamente os carimbos de data e hora dos arquivos ao transferir pela rede. Esta opção utiliza os carimbos de tempo do sistema de arquivos FAT em vez do NTFS.
O uso de /IPG
para Controlar o Intervalo Entre Pacotes
Ao copiar arquivos pela rede, você pode usar o interruptor /IPG
. Isso também é conhecido como a opção de intervalo entre pacotes. Esta opção define (em milissegundos) a frequência com que o robocopy aguardará entre o envio de 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 tem uma opção (/B
) ou como um 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ê normalmente 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 esteja sendo executado como administrador local, o Windows não permitirá o acesso.
ATENÇÃO: Houve relatos de volumes de servidor corrompidos ao copiar dados para um servidor Windows 2016 com a desduplicação ativada. Quando você utiliza a opção
/ZB
, o resultado é a destruição de um repositório de chunks de desduplicação 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 utiliza o modo de backup para utilizar o SeBackupPrivilege para leitura de arquivos e o direito do usuário SeRestorePrivilege para acessar quaisquer arquivos necessários. Isso ignora quaisquer ACEs que normalmente impediriam o acesso a esses arquivos.
Os direitos do usuário SeBackupPrivilege e SeRestorePrivilege são normalmente atribuídos aos usuários nos grupos Backup Operators e Administradores, mas às vezes podem ser removidos. O módulo de backup elimina esse risco e concede temporariamente ao usuário que executa o robocopy esses direitos.
Se você quiser 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ê é para excluir arquivos e diretórios de muitas maneiras diferentes. Eu dividi todas as formas de 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 de robocopy é feito usando curingas. Você pode usar um curinga para filtrar arquivos que correspondam a um determinado nome de arquivo ou extensão.
Por exemplo, para copiar apenas arquivos TXT, você pode especificar *.txt.
Se você deseja limitar apenas aos arquivos que começam com a letra a, você pode usar a*.
Você também pode fornecer múltiplos conjuntos de correspondências de nomes de arquivo separando-os com um espaço, como mostrado abaixo.
Ao filtrar 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 determinados diretórios que correspondam 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 carimbo 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 |
Há duas opções populares para escolher ao filtrar coisas como carimbo de data/hora; /XO
e /MAXAGE
.
/XO
permite que você exclua arquivos da cópia apenas se eles forem mais recentes do que a origem. Usando a opção /XO
, você pode robocopy apenas arquivos novos por data de acesso.
Se você souber a idade máxima que os arquivos terão, você também pode usar a opção /MAXAGE
. Isso permite que você especifique no formato AAAAMMDD 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 que essas opções logo se tornem 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.
Arquivos de trabalho do Robocopy são arquivos de texto contendo uma opção por linha. Normalmente, você usará o robocopy para criar esses arquivos de trabalho. Uma vez criados, você pode usar o robocopy para modificá-los ou um editor de texto simples.
Você tem vários comandos robocopy que funcionam com os 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 conteria apenas uma opção por linha.
Salvando Arquivos de Trabalho
Salvar um arquivo de trabalho é tão simples quanto adicionar a opção /SAVE:<nomedojob>
ao final da sua sintaxe. Substitua <nomedojob>
pelo nome do trabalho. A opção /SAVE
criará um arquivo chamado <nomedojob>.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á esteja lá, o robocopy sempre sobrescreverá o existente. 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 será incluída no arquivo de trabalho. Me avise se você conseguir incluir isso.
Usando Arquivos de Trabalho
Uma vez que um trabalho é salvo em um arquivo de trabalho, você pode 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 e então executa como se você tivesse fornecido as opções diretamente na linha de comando.
Criando um Arquivo de Trabalho Sem Executar um Trabalho Usando /QUIT
O propósito da opção /QUIT
não é óbvio. À primeira vista, você pode pensar que /QUIT
força a saída de um trabalho em execução. Em vez disso, /QUIT
age mais como uma opção para impedir que um trabalho seja executado em primeiro lugar.
Oficialmente, a opção /QUIT
“força o robocopy a encerrar 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
, ela também executará automaticamente o trabalho. Não há como criar um arquivo de trabalho sem executar o trabalho primeiro. Você pode criar o arquivo de trabalho RCJ com um editor de texto ou pode usar o robocopy para fazer isso, adicionando /QUIT
ao final.
Editando um Arquivo de Trabalho
Como os arquivos de trabalho são apenas arquivos de texto, você pode editá-los com seu editor de texto favorito ou pode pedir para 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ê queira excluir todos os arquivos EXE do seu trabalho robocopy salvo em um arquivo de trabalho chamado backupfiles.rcj. Você já criou o arquivo de trabalho e não quer sobrescrever o arquivo inteiro. Você pode adicionar a nova opção assim:
Usando Múltiplos Arquivos de Tarefa
É possível combinar o uso de vários 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 do 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 backupfiles assim:
Como o arquivo original de trabalho 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 única.
Modelos do Robocopy e o Uso das Opções /NOSD
e /NODD
Se você estiver trabalhando com muitos arquivos de tarefa, pode criar 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 nesse cenário.
Você pode criar 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 de forma alguma.
Como exemplo simples, crie um arquivo de tarefa sem um diretório de 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á um diretório de origem ou destino especificado.
Quando você cria um trabalho sem especificar um 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 serve como um “modelo” para outros trabalhos.
No entanto, 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ão então repassados 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 melhor desempenho, não envie o log para o console. Em vez disso, use/LOG
.
Agendamento do Robocopy
O Robocopy oferece 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ê tiver uma janela de manutenção ou um momento 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 execute 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á o horário atual e esperará pelo horário de início para executar.

Você deve garantir que ambos os horários estejam em formato de 24 horas e tenham exatamente quatro dígitos. A janela deve ser maior que dois minutos.
Por padrão, usando /RH
irá 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 levar mais tempo 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 é 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 do trabalho.
O cabeçalho do trabalho é o simples cabeçalho ROBOCOPY no topo.

O resumo do trabalho mostra um status resumido de todos os arquivos/pastas, quanto dados foram transferidos e o horário 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 qualquer uma dessas opções ou ambas juntas.

Redirecionando o Log de Saída para um Arquivo
Se você precisar salvar o log de saída, 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 abaixo. A única saída que você receberá no console é o caminho para o arquivo de log.
Se você deseja manter o conteúdo de qualquer arquivo de log existente e anexar resultados a um arquivo, pode usar o operador +
como mostrado abaixo.
Redirecionando o Log de Saída para um Arquivo e Exibindo no Console
Se deseja salvar o log de saída em um arquivo e também vê-lo no console, pode usar a opção /TEE
. Esta 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
Como todos os outros utilitários 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 isso nem sempre 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 há um arquivo “extra” na pasta de destino, mas não na pasta de origem. Este código exclui extras que impedirão quaisquer exclusões do destino.
Alterando o Código de Saída em um Arquivo de Lote
Se você estiver executando o robocopy com um arquivo em lote, você pode encontrar o valor da variável %ERRORLEVEL%
. Se retornar 1, 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. Em seguida, você pode verificar a propriedade ExitCode
para um valor de 1. Se o código de saída for 1, saia do script do PowerShell com 0 usando $host.SetShouldExit()
.
Erros Comuns
Se você estiver lidando com milhares de arquivos, é provável que você 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 parâmetro inválido de erro, isso normalmente significa que você tentou passar opções para o robocopy de alguma forma fora de ordem. O erro parâmetro inválido de robocopy 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 do Robocopy
Você pode criar suas próprias strings de robocopy ou pode pegar o que os outros aprenderam e usá-los! Nesta seção, vou cobrir casos de uso sobre como usar o robocopy para realizar várias coisas.
Encontrar o tamanho do diretório de uma pasta de rede
Contribuidor: northendtroooper (Reddit)
Excluir rapidamente o conteúdo da pasta (ignorando permissões em subpastas)
Contribuidor: pizzasteveo (Reddit)
Realizar 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 sobre cada objeto recursivamente, mesmo que também estejamos configurando herança.
Finalmente, fazemos uma cópia completa do robocopy com DACLs para o destino com log. O log pode então ser revisado para problemas de permissão adicionais ou apenas travamentos de arquivos e outra sincronização delta pode ser realizada posteriormente.
Recursivamente force o grupo Administradores como proprietário de todos os arquivos e diretórios. Pode haver maneiras de contornar isso, mas esta é a abordagem mais agressiva e geralmente a mais rápida.
Uma vez que somos os proprietários, agora podemos forçar um novo ACE no DACL para cada objeto. Isso concede aos Administradores controle total com herança ativada e de forma recursiva pelo caminho.
Configurar isso na raiz com herança cobriria o ambiente, mas quando um compartilhamento tem CREATOR OWNER com Controle Total (o que infelizmente é até a recomendação da Microsoft para coisas como armazenamentos de perfil de usuário de arquivo), o usuário pode desativar a herança ou remover ACEs a seu critério. Portanto, uma abordagem agressiva geralmente é a solução mais rápida.
Uma vez que alteramos os DACLs na maioria dos arquivos, tentamos copiar os arquivos para um novo local, comum para coisas como migrações de compartilhamento de arquivos. Para isso, estamos copiando os itens de forma recursiva e usando o interruptor /SEC
para também copiar os Dados/Atributos/Timestamps/DACLs.
Em seguida, registramos a operação com caminhos completos e para todos os objetos (interruptor /V
verboso) em um registro, para que possamos remediar os <5% de erros que geralmente são 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. Ele também melhora o controle de TI sobre os dados. Se um cliente tiver uma prática forte de governança de dados onde a propriedade é gerenciada adequadamente em nível de pasta filho, isso se torna uma discussão mais complicada, mas a maioria dos clientes que encontramos tem a sorte de estar usando apenas herança e ACEs baseados em grupo, então esta é a situação mais comum e a correção com a qual começamos.
Alternativas ao Robocopy
O Robocopy é uma ferramenta incrível, mas existem muitas outras ferramentas semelhantes que podem ser de interesse.
- xxcopy – Uma utilidade de linha de comando similar com toneladas de opções.
- Comando Copy-Item do PowerShell – Não tão completo, mas muito mais simples.
- TreeSize – Utilitário GUI e scriptável para encontrar informações de pastas.
Resumo
O Robocopy é uma excelente ferramenta para copiar grandes conjuntos de arquivos. Seja para fazer uma migração de dados, manter pastas sincronizadas ou simplesmente precisar de uma maneira rápida para copiar arquivos com precisão, o robocopy é uma ótima escolha.