Adam the Automator

Robocopy é um dos utilitários de linha de comando mais usados para copiar grandes volumes de dados no Windows. É uma ferramenta tão popular por causa de quão poderosa é. Mas com todo esse poder vem a complexidade. Neste guia, Vamos quebrar toda essa complexidade e fornecer um tutorial completo sobre como usar esta ferramenta útil.

Robocopy é um utilitário de linha de comando do Windows que está disponível desde o Windows NT. É um substituto para o utilitário xcopy menos versátil. Ele permite que você especifique um caminho de unidade ou caminho do servidor para copiar/mover arquivos em um prompt de comando.

a versão do Robocopy a partir desta redação é de até 10.0.18. Esta é a versão em que realizei meus testes.

Robocopy fornece uma série de recursos que você pode aproveitar para executar cópias e movimentos de arquivos eficientes e rápidos. Pode:

  • Copiar ficheiros através de uma rede com currículo capacidades
  • Pode ignorar os pontos de junção NTFS causando falha normalmente a partir de loops infinitos
  • Pode copiar arquivos e atributos de diretório preservação de carimbos de data / hora
  • Pode copiar as permissões de NTFS, proprietários, e auditoria info
  • Pode copiar diretório de carimbos de data / hora
  • Pode copiar arquivos em ‘backup’ de modo a garantir que os arquivos são copiados, mesmo aqueles direitos que foram negados ao administrador
  • repetições Automáticas
  • Pode sincronizar duas pastas
  • É inteligente o suficiente para ignorar ficheiros foram copiados
  • pode copiar caminhos maiores do que o limite de caminho de 256 caracteres
  • executar 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 a copiar. Eu queria cobrir tudo o que você precisa saber sobre esta ferramenta útil.

Índice

referência de sintaxe Robocopy comum

por que um post tão longo em um único utilitário? Apenas delicie seus olhos nas mesas abaixo. Você tem muitas opções para copiar ou mover arquivos com o robocopy! Você terá mais opções nas seções individuais.

essas tabelas foram construídas a partir da sintaxe de Ajuda retornada de robocopy /?. Eles foram divididos em seções mais significativas, adicionadas ao longo do tempo e limpas para fornecer informações mais úteis.

Opções de Fonte de

Parâmetro Explicação Comportamento Padrão Equivalente Interruptor Notas
/S Copiar subpastas
/E Copiar subpastas, incluindo subpastas vazias
/CÓPIA: opções de Cópia /CÓPIA:DAT D=Dados, A=Atributos, T=Carimbos de data / hora S=Segurança=ACLs, O=info do Proprietário, U=auditoria de informações. Dados do arquivo (D) sempre inclui o arquivo de Carimbos de data / hora (T)
/SEC Copiar arquivos com Segurança /CÓPIA:DATS
/DCOPY:T directório de Cópia carimbos de data / hora
/COPYALL Copiar TODAS as informações do ficheiro /CÓPIA:DATSOU Isto irá evitar a desidratação e arquivos off-line em vez disso, copie o arquivo da tag (no emc VNX/Unidade de sistemas de, no mínimo). Isso não está oficialmente documentado! Se a desidratação é o que você precisa (motivo pelo qual encontrei esse problema), você não pode copiar os ACLs ao longo de seus arquivos. CRÉDITO: Monsieurx (Reddit)
/NOCOPY Copiar NENHUM arquivo de informações útil com /LIMPAR
/UM Copiar somente arquivos com o atributo de Arquivo definido
/M como /Uma, mas remover o atributo de Arquivo de ficheiros de origem
/LEV:n copiar Apenas os n primeiros Níveis da árvore de origem
/MAXAGE:n IDADE Máxima do arquivo – excluir arquivos mais antigos que n dias/data
/MINAGE:n arquivo Mínimo de IDADE – excluir arquivos mais recentes do que de dias n/data Se n < 1900, em seguida, n = n.º de dias, mais n = AAAAMMDD data
/FFT Suponha arquivos FAT Vezes 2-segunda data/hora de granularidade. Isso substitui os carimbos de data / hora NTFS. Parece ser mais confiável ao transferir através de uma rede.
/256 desligue caminho muito longo (> 256 caracteres) apoio

Opções de Destino

Parâmetro Explicação Comportamento Padrão Equivalente Interruptor Notas
/A+: Conjunto de atributo de arquivo(s) em arquivos de destino + adicionar
/Um-: Remover o atributo de arquivo(s) em arquivos de destino
/FAT Criar arquivos de destino usando 8.3 FAT somente nomes de arquivo
/CRIE Criar estrutura de árvore de diretório + arquivos de comprimento zero apenas
/DST Compensar uma hora de hora de hora de verão diferenças

Opções De Cópia

Parâmetro Explicação Comportamento Padrão Equivalente Interruptor Notas
/L Lista de arquivos apenas não copie, carimbo de data / hora ou excluir quaisquer arquivos de
/MOV Mover arquivos Excluir a partir do código fonte depois de copiar
/MOVER Mover arquivos e diretórios Excluir a partir do código fonte depois de copiar
/sl Copiar arquivo de links simbólicos em vez do alvo
/Z Copiar arquivos no modo reiniciável Sobreviver a uma rede falha
/B Copiar ficheiros em modo de backup
/J Copiar usando sem buffer de e/S Recomendado para arquivos grandes
/NOOFFLOAD Copiar arquivos sem utilizar o Windows copiar mecanismo de descarregamento https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831628(v=ws.11)
/EFSRAW Copiar quaisquer arquivos criptografados usando o EFS modo RAW
/TIMFIX arquivo de Correção de vezes em todos os arquivos, até mesmo arquivos ignorados
/XO Excluir mais velhos se o arquivo de destino existe e é a mesma data ou mais recente do que a de origem – não se preocupe, para substituí-lo.
/XC Excluir arquivos alterados
/XN Excluir arquivos mais recentes
/XX Excluir arquivos presentes no destino, mas não de origem /XX
/XF ficheiro … Excluir ficheiros que coincidem com nomes/caminhos/curingas
/XD dirs … Excluir pastas de correspondência de nomes/caminhos. /XF e / XD podem ser usados em combinação, por exemplo, ROBOCOPY c:\source d:\dest / XF *.documento *.xls /XD c:\unwanted /S
/IA: Incluir arquivos com qualquer um dos atributos
/XA: Excluir arquivos com qualquer um dos atributos
/IM Substituir os arquivos modificados. Isso inclui os mesmos arquivos com tempos diferentes.
Substituir os arquivos, mesmo se eles já estão com a mesma
/ELE Incluir arquivos tweaked
/XJ Excluir pontos de junção a partir do código fonte /XJ
/XJD Excluir os pontos de junção de diretórios de origem
/XJF Excluir os pontos de junção de arquivos de origem
/MAX.: n Excluir arquivos maiores que n bytes
/MIN:n Excluir arquivos menores do que n bytes
/MAXLAD:n Excluir arquivos não utilizados, desde que n
/MINLAD:n Excluir arquivos usados desde que n Se n < 1900, em seguida, n = n dias, o resto n = AAAAMMDD data
/MIR Espelho de uma árvore de diretório /LIMPAR /E
/PURGE Excluir dest arquivos/pastas que não existem mais na fonte
/XL Excluir arquivos presentes na fonte, mas não o destino
/SECFIX Robocopy /secfix correções do arquivo segurança em todos os arquivos, até mesmo arquivos ignorados. Especificar o tipo de informações de segurança que você deseja copiar, também utilizando uma das seguintes opções: /COPYALL /CÓPIA:S /CÓPIA:S /CÓPIA de:U /S
/ZB Usar o modo reiniciável; se o acesso negado usar o modo de Backup

Opções De Monitoramento

Parâmetro Explicação Comportamento Padrão Equivalente Interruptor Notas
/R:n Número de tentativas em falhou cópias /R:1000000 Sempre tente definir esta opção. Eu recomendo definir isso para 10-20 para não perder tempo tentando novamente.
/W:n tempo de Espera entre tentativas /W:30 Sempre tente definir esta opção para um número mais baixo para repetir mais rapidamente. Eu sugiro 5-10.
/REG Salvar /R:n e /W:n no registo do Windows como configurações padrão
/RH:hhmm-hhmm vezes quando novas cópias pode ser iniciado
/TBD Aguarde sharenames a ser definido erro de repetição 67
/PF Seleção de horas de funcionamento por arquivo (não por passagem) base
/MON:n Executar novamente quando mais de n mudança de visto
/INSPECÇÃO de circulação automóvel:m Executar novamente em m minutos, se mudou

a Compreensão do Robocopy Comportamento

eu já impressionou a sua mente com todo o potencial de sintaxe de opções disponíveis para você. Vamos agora ver todas as diferentes combinações de como podemos usar essa sintaxe.

eu poderia fornecer-lhe uma lista enormemente longa de comandos robocopy com um número cada vez maior de switches. Mas eu acho que é melhor te ensinar a pescar. Vamos analisar como colocar o sentido fora de todas essas opções.

Robocopy apenas copia diretórios inteiros

cada execução robocopy terá uma origem e um diretório de destino. Robocopy copia e move arquivos por diretório inteiro. Não é possível copiar explicitamente um único arquivo com o robocopy. Use copy ou Copy-Item do PowerShell para isso.

no entanto, você pode robocopy único arquivo com a filtragem certa que você vai aprender sobre abaixo. Para robocopy um único arquivo, especifique os diretórios de origem e destino imediatamente seguidos pelo nome do arquivo na origem.

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

a sintaxe depende do ambiente

além disso, as opções fornecidas 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 em uma rede ou localmente?
  • … e mais.

se não houver arquivos no diretório de arquivos de destino, você não deve se preocupar com opções que substituem arquivos. Se você não copiar arquivos pela rede, não se preocupe com essas opções. Defina explicitamente suas circunstâncias futuras atuais e potenciais em que seu ambiente estará.

reconhecer opções padrão

Robocopy usa muitas opções por padrão. Você pode escolhê-los olhando para as tabelas acima. Ele também fornece uma saída útil para cada vez que você executar o utilitário.

você pode ver abaixo que quando executei o robocopy com suas opções mais básicas (a pasta de origem e destino), ele usou automaticamente algumas opções. Entender o comportamento padrão é importante.

referenciar as opções que você vê na saída com as explicações opção acima e você vai entender exatamente o que robocopy está fazendo sob as tampas.

opções padrão do robocopy
opções padrão do robocopy

entendendo o que os comandos Robocopy podem fazer

se você usou copy ou cmdlets Copy-Item do PowerShell, provavelmente especificou uma fonte e um destino e continuou seu dia. Não há muitas opções que você possa configurar lá. Esses comandos robocopy têm um comportamento padrão.

mas o robocopy, por outro lado, entende muito mais e oferece a flexibilidade de ajustar o comportamento o quanto quiser.

é 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 quase tudo.

um arquivo sentado em um sistema de arquivos não é apenas um objeto burro com um único propósito. Existem muitos atributos e coisas diferentes que acompanham o conceito de um arquivo. Por exemplo, um arquivo tem atributos como:

  • um carimbo de data / hora (escrito, a modificação e acesso)
  • ACL do NTFS
  • um proprietário
  • NTFS informações de auditoria
  • oculto sinalizador
  • arquivados sinalizador

Quando você copiar ou mover um arquivo, você tem a opção de trazer todas essas coisas junto com ele, se você desejar.

entenda que quando você executa 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 contabilizá-lo nas opções que você fornece robocopy.

O Básico: Executando cenários WhatIf

se você tiver um servidor de arquivos enorme 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 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). Ele lhe dará uma visão geral do que o robocopy fará, dadas as opções que você forneceu.

Usando /L
Usando /L

O Básico: a Cópia de Ficheiros

O uso mais básico do robocopy é usar uma origem e o diretório de destino, sem opções.

> robocopy C:\src C:\dst

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. Este é, pelo que posso dizer, o método para copiar literalmente tudo o que há sobre um diretório de arquivos para outro diretório.

abaixo estou copiando todas as ACLs NTFS, proprietários de arquivos, subpastas (incluindo as vazias) e todos os atributos de arquivo. Tudo isso é possível com apenas a opção /E para incluir todas as subpastas vazias e /COPYALL para capturar o resto.

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

o básico: mover arquivos

mover arquivos transfere arquivos de um diretório para outro, assim como a cópia. A única diferença com uma operação de movimento é que os arquivos de origem são removidos após a cópia.

para excluir arquivos/diretórios da fonte após a cópia, use a opção /MOV. Isso removerá todos os arquivos no diretório especificado (sem subpastas).

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

você também pode usar /MOVE para mover todos os arquivos e subpastas.

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

o básico: sincronizar arquivos

o Robocopy permite sincronizar 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. /MIR irá replicar dados copiando todos os arquivos na fonte não no destino e excluir arquivos no destino não na fonte. Cuidado!

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

copiar arquivos em uma rede

se você estiver copiando arquivos em uma rede, existem algumas opções que você deve considerar.

Robocopy permite copiar arquivos no’ modo reiniciável ‘ usando a opção /Z. Isso significa que, se um arquivo começar a copiar e falhar no meio do caminho, a cópia poderá iniciar novamente em vez de falhar completamente. A opção /Z é útil quando o fluxo é cortado por uma rede.

atenção: alguns relataram o uso de /Z reduz o desempenho em 1/4. Deixe-me saber suas descobertas.

você também pode usar a opção /FFT. Sabe-se que esse switch preserva com mais precisão os carimbos de data / hora dos arquivos ao transferir pela rede. Esta opção usa carimbos de data / hora do sistema de arquivos FAT em vez de NTFS.

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

usando /IPG para controlar a lacuna entre pacotes

ao copiar arquivos em uma rede, você pode usar o switch /IPG. Isso também é conhecido como a opção inter-packet gap. Esta opção define (em milissegundos) a frequência na qual o robocopy aguardará entre o envio de novos pacotes.

sempre use UNC Paths not drive Letters

um leitor no Reddit descobriu a maneira mais difícil de não usar unidades mapeadas como um diretório de destino. Em vez disso, sempre use sempre um caminho UNC. Você pode ter problemas com o limite de 256 caracteres, se o fizer. Confira este documento da Microsoft para obter mais informações.

Modo De Backup Robocopy (Robocopy /Z)

Robocopy tem uma opção (/B) ou como um backup para o modo reinicializável (/ZB) que copia arquivos no modo de backup. O que é” modo de backup ” de qualquer maneira?

quando você costuma copiar um arquivo no Windows e clicar em 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á que você o acesse.

aviso: houve relatos de volumes de servidor corrompidos ao copiar dados para um servidor Windows Server 2016 com a duplicação ativada. Quando você usa o switch /ZB, o resultado será um armazenamento de dedup chunk sendo destruído nas informações de Volume do sistema. Os arquivos copiados não serão legíveis e gerarão erros ao tentar manipulá-los. Serverfault link com mais informações.

o Modo De Backup é uma maneira de acessar arquivos sem se preocupar com permissões.

Robocopy usa o modo de backup para usar o SeBackupPrivilege para ler arquivos e o direito do Usuário SeRestorePrivilege para acessar todos os arquivos de que precisa. Isso ignora todos os ases que normalmente o impediriam de acessar esses arquivos.

os direitos de usuário SeBackupPrivilege e SeRestorePrivilege são normalmente atribuídos aos usuários nos grupos operadores de Backup e administradores, mas às vezes eles 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 tem esse direito, você pode executar whoami /priv e ambos os direitos devem ser exibidos.

filtrando arquivos e pastas

a grande maioria das opções disponíveis para você é excluir arquivos e diretórios de muitas maneiras diferentes. Eu dividi todas as maneiras que você pode filtrar ou excluir arquivos e diretórios com base em vários critérios.

por nome de arquivo ou extensão de arquivo

filtrar quais arquivos são copiados / movidos em uma chamada robocopy é feito usando curingas. Você pode usar um curinga para filtrar arquivos correspondentes a uma string ou extensão de nome de arquivo específica.

por exemplo, para copiar apenas arquivos TXT, você pode especificar *.txt.

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

se você quiser limitar apenas os arquivos que começam com a, você pode usar a*.

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

Y0u também pode fornecer vários conjuntos de correspondências de nome de arquivo, separando-os com um espaço como mostrado abaixo.

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

quando você filtra pelo nome do arquivo, o robocopy mostrará o filtro na saída.

filtrando a saída dos arquivos
filtrando a saída dos arquivos

pelo nome do Diretório

o Robocopy permite filtrar itens não apenas por arquivo, mas também por nome do diretório. Usando robocopy /xd, você pode excluir determinados diretórios correspondentes a um nome específico.

ao copiar várias pastas, use a opção /XD para excluir pastas da execução.

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

por carimbo de data/hora de 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.

Parâmetro Explicação
/DCOPY:T directório de Cópia carimbos de data / hora
/MAXAGE:n Excluir arquivos mais antigos que n dias/data
/MINAGE:n Excluir arquivos mais recentes do que de dias n/data
/XO Se o arquivo de destino existe e é a mesma data ou mais recente do que a fonte, não substituir
/XN Se o arquivo de destino existe e é a mesma data ou mais do que a fonte, não substituir

Há duas opções populares para escolher quando a filtragem de coisas como o carimbo de data / hora; /XO e /MAXAGE.

/XO permite excluir arquivos de cópia somente se eles são mais recentes do que a fonte. Usando a opção /XO, você pode robocopy apenas novos arquivos por data de acesso.

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

se você souber que os arquivos de idade máxima serão, Você também pode usar a opção /MAXAGE. Isso permite que você especifique no formato YYYMMDD a data mais antiga que um arquivo pode ter antes de ser copiado.

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

Robocopy Jobs

você viu que dezenas de opções estão disponíveis para você. É fácil que essas opções logo se tornem pesadas. Felizmente, você tem uma opção melhor do que memorizar e garantir que todas essas opções estejam sempre presentes.

os 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. Depois de criado, você pode usar o robocopy para modificá-los ou um editor de texto simples.

você tem vários comandos robocopy que funcionam com jobs.

Parâmetro Explicação Comportamento Padrão Equivalente Interruptor Notas
/TRABALHO:jobname exame de parâmetros nomeados a partir do arquivo de trabalho de
/SALVAR:jobname Salvar parâmetros para o arquivo de trabalho
/FECHAR Sair após o processamento de linha de comando Útil para a visualização de parâmetros de
/NOSD Nenhuma fonte de diretório especificado
/NODD Nenhum diretório de destino especificado
/SE Incluir os seguintes arquivos

um arquivo de trabalho típico criado com robocopy tem uma extensão RCJ e se parece com o trecho abaixo. Este arquivo de trabalho foi criado executando robocopy C:\src D:\dst /save:myjob. Você pode ver que você pode fornecer comentários no arquivo de trabalho usando :: que é a maior parte do que este arquivo tem.

Sem comentários, O arquivo conteria apenas uma opção por linha.

:::: Robocopy Job C:\MYJOB.RCJ:::: Created by Administrator on Sunday, August 18, XXXX at 8:53:24 AM:::::: Source Directory ::: /SD:C:\SRC\ :: Source Directory.:::: Destination Directory ::: /DD:C:\SRC\ :: Destination Directory.:::: Include These Files ::: /IF :: Include Files matching these names:: *.* :: Include all names (currently - Command Line may override):::: Exclude These Directories ::: /XD :: eXclude Directories matching these names:: :: eXclude no names (currently - Command Line may override):::: Exclude These Files ::: /XF :: eXclude Files matching these names:: :: eXclude no names (currently - Command Line may override):::: Copy options ::: /DCOPY:DA :: what to COPY for directories (default is /DCOPY:DA). /COPY:DAT :: what to COPY for files (default is /COPY:DAT).:::: Retry Options ::: /R:1000000 :: number of Retries on failed copies: default 1 million. /W:30 :: Wait time between retries: default is 30 seconds.:::: Logging Options :::

salvar arquivos de trabalho

salvar um arquivo de trabalho é tão simples quanto anexar a opção /SAVE:<jobname> ao final de sua sintaxe. Substitua <jobname> pelo nome do trabalho. A opção /SAVE criará um arquivo chamado < jobname >.rcj no diretório onde você executou o robocopy.

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

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 substituirá o existente. Backup ou versão Controle seus arquivos de trabalho!

Nota: Se você tentar usar a opção /MT ao salvar em um arquivo de trabalho, ele não estará no arquivo de trabalho. Deixe-me saber se você conseguiu que isso fosse incluído.

usando arquivos de trabalho

uma vez que um trabalho é salvo em um arquivo de trabalho, você pode usar a opção /JOB:<jobname> para especificar o arquivo de trabalho para ler. Robocopy lê todos os parâmetros dentro do arquivo de trabalho. Em seguida, ele é executado como se você fornecesse as opções diretamente na linha de comando.

> robocopy /JOB:myjob

Criando um arquivo de trabalho sem executar um trabalho usando / QUIT

a finalidade da opção /QUIT não é óbvia. Na superfície, você pode pensar /QUIT força uma corrida para sair. Em vez disso, /QUIT age mais como uma opção para evitar 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á o trabalho automaticamente. Não há como criar um arquivo de trabalho sem primeiro executar o trabalho. Você pode criar o arquivo de trabalho RCJ com um editor de texto ou pode usar o robocopy do it anexando /QUIT ao final.

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

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 fazer com que o robocopy faça isso por você.

você pode editar arquivos de trabalho usando uma combinação de /JOB, /SAVEe /QUIT.

por exemplo, talvez você gostaria de 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 a coisa toda. Você pode adicionar a nova opção como abaixo:

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

usando vários arquivos de trabalho

você pode até combinar o uso de arquivos de trabalho também. Ao especificar vários arquivos de trabalho 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 uma exclusão.arquivo rcj.

/XF a.exe b.txt c.cer

você pode excluir esses arquivos do trabalho backupfiles assim:

> robocopy /JOB:backupfiles /JOB:exclude

como o arquivo de trabalho backupfiles original já estava excluindo todos os arquivos EXE, a sintaxe da execução acima seria /XF *.exe a.exe b.txt c.cer. Robocopy combina todas as opções em uma.

modelos Robocopy e usando as opções /NOSD e / NODD

se você estiver trabalhando com muitos arquivos de trabalho, poderá criar arquivos de trabalho para aceitar parâmetros. Robocopy permite que você passe valores da linha de comando para trabalhos quando eles são executados. Um parâmetro não é um termo robocopy, mas se encaixa bem neste cenário.

você pode criar trabalhos robocopy para aceitar parâmetros não especificando um diretório de origem ou destino usando explicitamente 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 trabalho SEM origem ou destino usando a sintaxe abaixo. A intenção deste trabalho é copiar todos os arquivos TXT e EXE de uma fonte para um diretório de destino.

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

por si só, este trabalho nunca funcionará porque não há nenhum diretório de origem ou destino especificado.

quando você cria um trabalho SEM diretório de origem e destino, o arquivo de trabalho é criado automaticamente usando as opções /NOSD e /NODD.

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

as opções /NOSD dizem 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á passada para o trabalho.

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

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 do que de uma vez usando a opção /MT.

a opção /MT permite especificar o número de threads que o robocopy usará para copiar arquivos. O máximo é 128.

você pode usar /MT assim:

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

eu escolhi 32 neste caso como uma linha de base. Sugiro começar em 32 para ver como seu computador e rede lidam com as coisas e ajustam os threads de acordo.

observe que, se você usar /MT, não poderá usar /IPG ou /EFSRAW. Para um melhor desempenho, não envie o log para o console. Em vez disso, use /LOG.

Agendamento Robocopy

Robocopy tem algumas maneiras que você pode agendar quando ele é executado.

usando /RH

usando a opção /RH, você pode dizer ao robocopy para executar apenas durante um tempo específico. Isso é ótimo se você tiver uma janela de manutenção ou um momento em que todos foram para casa durante o dia.

você pode especificar uma hora de início e uma hora de término no formato HHMM-HHMM. Por exemplo, para invocar o robocopy, mas apenas permitir que ele seja executado entre as horas de 5 e 9, conforme definido pelo relógio do sistema, executar:

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

Você vai ver que, se você chamar o robocopy fora das horas, ele vai dizer a hora atual e aguardar o horário de início para executar.

o Robocopy informa a que horas será iniciado se programado
o Robocopy informa a que horas será iniciado se programado

você deve garantir que ambas as vezes estejam em um formato de 24 horas e tenham exatamente quatro dígitos. A janela deve ser maior que dois minutos.

por padrão, usar /RH verificará a hora de início antes de toda a execução. No entanto, se você tiver muitos arquivos e acreditar que o processo pode durar mais do 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

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.

Parâmetro Explicação Comportamento Padrão Equivalente Interruptor Notas
/NP Não há progresso. Suprime a exibição de informações de progresso. Isso pode ser útil quando a saída é redirecionada para um arquivo.
/unicode Exibir o status de saída de texto unicode
/LOG:arquivo status de Saída para o ficheiro de log e substituir
/UNILOG:arquivo status de Saída para o arquivo de log unicode e substituir
/+LOG:arquivo status de Saída para o ficheiro de log e acrescentar ao arquivo de log existente
/UNILOG+:arquivo status de Saída para o arquivo de log unicode e acrescentar ao arquivo de log existente
/TS Exibe os carimbos de data / hora do arquivo para cada arquivo processado.
/FP Substitui simples de nomes de ficheiros com nomes de caminho completo do arquivo na saída.
/NS não mostra o tamanho dos arquivos.
/NC Oculta de saída do arquivo de classe “Tags” (Acesse aqui para mais informações: https://www.uvm.edu/~gcd/2015/04/robocopy-file-classes/)
/NFL Oculta nomes de arquivo. Falhas ainda são registradas. Quaisquer arquivos excluídos ou seria eliminado se /L foi omitido sempre são registrados
/NDL Oculta saída da listagem de diretórios. Os nomes de Caminho do arquivo completo são enviados para rastrear arquivos problemáticos com mais facilidade.
/TEE Saída para a janela do console, bem como o arquivo de log
/NJH Nenhum cabeçalho de trabalho
/NJS Não há resumo de trabalho
/BYTES tamanhos de Impressão como bytes
/X Relatório de todos os arquivos, não apenas aquelas selecionadas & copiado
/V Produzir verboso registo de saída, mostrando arquivos ignorados
/ETA Mostrar tempo estimado de chegada dos arquivos copiados. Consulte a hora de início de cada cópia do arquivo e o tempo estimado de conclusão com base na taxa de transferência observada das cópias anteriores. Os tempos são exibidos após o nome do arquivo no formato HH: MM – > HH: MM (início – > acabamento).
/DEBUG Mostrar depuração de informações de volume

Limitação de Registo de Elementos com /NJS e /NJH

Por padrão, robocopy retorna dois elementos, na saída, um cabeçalho de trabalho e um resumo do trabalho.

o cabeçalho do trabalho é o cabeçalho ROBOCOPY simples na parte superior.

Robocopy job header
Robocopy job header

o resumo do trabalho mostra um status de resumo de todos os arquivos / pastas, quantos dados foram transferidos e o tempo que a execução terminou.

Robocopy resumo do trabalho
Robocopy resumo do trabalho

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

Ocultar o cabeçalho de trabalho e resumo do trabalho
Ocultar o cabeçalho de trabalho e resumo do trabalho

Redirecionando a Saída de Log para um Arquivo

Se você precisa 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 sobrescrever qualquer arquivo de log existente use a sintaxe /LOG:<filepath> como abaixo. A única saída que você receberá no console é o caminho para o arquivo de log.

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

se você quiser manter o conteúdo de qualquer arquivo de log existente e anexar resultados a um arquivo, você pode usar o operador + como mostrado abaixo.

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

redirecionando o Log de saída para um arquivo e exibindo no Console

se você quiser salvar o log de saída em um arquivo, mas também vê-lo no console, você pode usar a opção /TEE. Essa opção faz com que o robocopy grave a saída no arquivo de log enquanto ainda mantém o comportamento padrão de retornar a saída ao console.

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

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 nós desejamos que o robocopy sempre saia com sucesso com um 0, mas isso nem sempre acontece.

abaixo você encontrará todo o código de saída que robocopy retorna e sua explicação. Qualquer código de saída maior que sete indica pelo menos uma falha durante a execução.

Código de Saída Explicação
0 Nenhuma ação executada. Origem e destino são sincronizados.
1 pelo menos um arquivo foi copiado com sucesso.
2 arquivos ou diretórios extras foram detectados. Examine o log.
3 códigos de saída 2 e 1 combinados.
4 arquivos ou diretórios incompatíveis encontrados. Examine o log.
5 códigos de saída 4 e 1 combinados.
6 códigos de saída 4 e 2 combinados.
7 códigos de Saída 4, 1 e 2 combinados.
8 pelo menos um arquivo ou diretório não pôde ser copiado. Limite de repetição excedido. Examine o log.
16 Cópia falhou catastroficamente.

observe que se você estiver executando o robocopy em um utilitário de terceiros, esse utilitário pode pensar que qualquer código de saída diferente de zero é 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 do arquivo Robocopy ” extra “é 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 quaisquer exclusões do Destino.

alterando o código de saída em um arquivo em lote

se você estiver executando o robocopy com um arquivo em lote, poderá encontrar o valor da variável %ERRORLEVEL%. Se retornar 1, use a palavra-chave exit para sair do script com 0.

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

Alterar 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 uso de PassThru para retornar o processo criado e Wait para aguardar o robocopy para concluir. Você pode então verificar a propriedade ExitCode para um valor de 1. Se o código de saída for 1, saia do script PowerShell com um 0 usando $host.SetShouldExit().

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

Erros Comuns

Se você está lidando com milhares de arquivos, você é obrigado a executar através de alguns problemas. Aqui está uma quebra de erros comuns que encontrei

erro parâmetro inválido

quando você vê um erro informando erro parâmetro inválido, isso normalmente significa que você tentou passar opções para robocopy fora de sequência de alguma forma. O erro robocopy invalid parameter 3 é o mais comum, ao que parece.

um motivo comum pelo qual você receberia esse erro é quando você especifica um diretório de origem ou destino com espaços e esquece de cercá-lo com aspas.

exemplos Robocopy

você pode construir suas próprias strings de robocopy ou você pode pegar o que os outros aprenderam e usá-los! Nesta seção, abordarei 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)

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

Rapidamente, elimine o conteúdo da pasta (ignorando as permissões em subpastas)

Colaborador: pizzasteveo (Reddit)

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

Realizar grandes migrações de arquivos

Colaborador: @MySnozzberries (Twitter)

O objetivo deste trecho é a força e a propriedade de todos os arquivos de volta para os Administradores. Em seguida, adicionamos um ás explícito para o grupo Administradores para controle total em cada objeto recursivamente, embora também estejamos definindo 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 adicionais de permissão ou apenas bloqueios de arquivo e outra sincronização delta pode ser executada mais tarde.

> takeown /F .\test /R /A /D Y> icacls .\test /grant "Administrators":(OI)(CI)F /T> robocopy .\test .\test2 /E /SEC /FP /V /LOG:.\temp.log

forçar recursivamente o grupo Administradores como o proprietário de todos os arquivos e diretórios. Pode haver maneiras de contornar isso, mas esta é a abordagem mais pesada e geralmente a mais rápida.

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

uma vez que somos o proprietário, agora podemos forçar um novo ACE no DACL para cada objeto. Isso concede aos administradores controle total com herança habilitada e recursivamente através do caminho.

definir isso na raiz com herança cobriria o ambiente, mas quando um compartilhamento tem o proprietário do Criador Com controle total (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 Ases a seu critério. Portanto, uma mão pesada geralmente é a correção mais rápida.

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

depois de alterar 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 recursivamente e usando a opção /SEC para também copiar os dados/atributos/carimbos de data/hora / DACLs.

em seguida, registramos a operação com caminhos completos e para todos os objetos (/V interruptor detalhado) para um log, para que possamos corrigir o <5% dos erros que são comumente comprimento do caminho ou bloqueio de arquivo relacionado e obter mais granular.

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

esta é uma estrutura 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 mantém sobre os dados. Se um cliente tem uma forte prática de governança de dados em que a propriedade é gerenciada adequadamente em um nível de pasta filho, isso se torna uma discussão mais complicada, mas a maioria dos clientes que encontramos tem sorte de usar apenas ases baseados em herança e grupo, então esta é a situação mais comum e corrigida em que começamos.

Robocopy alternativas

Robocopy é uma ferramenta incrível, mas existem tantas outras ferramentas semelhantes a ele que podem ser de interesse.

  • xxcopy-um utilitário de linha de comando semelhante com toneladas de opções.
  • Copy-Item PowerShell cmdlet – não tão caracterizado, mas muito mais simples.
  • TreeSize – GUI e utilitário de script para encontrar informações de pasta.

resumo

Robocopy é uma excelente ferramenta para copiar grandes conjuntos de arquivos. Se você está fazendo uma migração de dados, mantendo pastas em sincronia ou simplesmente precisa de uma maneira rápida de copiar arquivos com precisão, robocopy é uma ótima escolha.

Deixe uma resposta

O seu endereço de email não será publicado.