O Robocopy não copia a pasta raiz e seu registro de data e hora

10

Robocopy não copia a pasta raiz e seu registro de data e hora - ela copia todos os subdiretórios e arquivos (quando as opções apropriadas são definidas) e parece não haver nenhuma opção / argumento para dizer ao Robocopy que você deseja a própria pasta raiz e seu tempo carimbo ou atributos a serem copiados textualmente também.

digamos que eu queira copiar C: / Brushes

O Robocopy copia todos os seus subdiretórios e arquivos para o destino, mas não a pasta Brushes, com todos os atributos associados e data e hora.

Você entende o que estou perguntando? Isso é bem básico e o Robocopy parece não ter uma opção para isso. As pessoas colocaram a questão antes em vários fóruns, mas, no que me diz respeito, ninguém respondeu à pergunta.

    
por ptrcao 18.01.2012 / 00:08

10 respostas

8

robocopy %1 "C:\DestinationDirectory\%~n1" /E /V /DCOPY:T /LOG:"C:\DestinationDirectory\Copied.txt" /R:10 /W:30 

Solte uma pasta no bat ou use em Enviar para . Criará pasta com nome & data e hora do diretório de origem e copiar todos os arquivos.

    
por 09.05.2012 / 12:44
3

Concordo com o OP, não ser capaz de copiar a pasta raiz é uma grande falha do robocopy. Que tal fazer batota e mover a pasta de pincéis para uma pasta temporária, executar a operação de robocopy na pasta temporária e, em seguida, movê-la de volta?

Algo como:

md "c:\verytemporary" && move "c:\brushes" "C:\verytemporary"||( echo Line 1 error occurred & goto :eof )
robocopy c:\verytemporary d:\ /MIR /DCOPY:T
move "c:\verytemporary\brushes" "c:\" && rd /q "c:\verytemporary"||echo Line 3 error occurred
    
por 26.04.2012 / 22:43
2

Teste md D:\Backup\Brushes && robocopy C:\brushes D:\Backup\Brushes da linha de comando, substituindo os caminhos corretos.

    
por 18.01.2012 / 01:54
2

Como não vejo solução boa e fácil em nenhuma das respostas:

Se não houver solução para o robocopy, você pode dar uma olhada em xxcopy (há versões gratuitas e comerciais).

Existem, é claro, muitas outras alternativas ao robocopy, algumas estão listadas aqui .
Consulte também Melhor utilitário de cópia de arquivos gratuitos .

    
por 02.02.2012 / 12:28
1

A resposta do user105198 é a meio caminho,

D:\Backup\Brushes && robocopy C:\brushes D:\Backup\Brushes criará uma nova pasta. Você precisará anexar / MIR e / DCOPY: T a ele

With the /mir option, if the destination directory exists, the destination directory security settings are overwritten. Technet

/DCOPY:T :: COPY Directory Timestamps.

combinados, significa que os atributos e registros de data e hora do diretório de origem serão espelhados para a pasta criada.

então:

D:\Backup\Brushes && robocopy C:\brushes D:\Backup\Brushes /MIR /DCOPY:T
    
por 30.01.2012 / 00:41
1

Eu acho que você vai descobrir que o Robocopy faz exatamente o que você quer, desde que você diga para copiar timestamps da pasta (/ DCOPY: T). De minhas experiências, descobri que o seguinte comportamento (aparentemente não documentado) é verdadeiro para o Robocopy:

All specified properties of the source directory are applied to the destination directory, regardless of whether the destination directory exists, doesn't exist, or has a different name from the source directory.

As propriedades especificadas podem incluir (pelo menos) as informações de segurança (/ SEC) ou registros de data e hora da pasta (/ DCOPY: T).

Portanto, no exemplo a seguir, c: \ destination \ folder receberá os mesmos timestamps que c: \ source \ folder.

robocopy c:\source\folder C:\destination\folder /E /DCOPY:T

Eu testei isso com as versões do Robocopy incluídas no Windows 7, no Windows 8 e no Windows 2003 Resource Kit (somente no parâmetro / SEC). Note que somente as versões mais recentes do Robocopy (XP026 e posteriores) suportam o parâmetro / DCOPY: T.

    
por 14.04.2013 / 02:31
0

Se você combinar /IF :: Include the following Files. com /E :: copy subdirectories, including Empty ones. , verá (próximo) o efeito desejado:

C:\Temp\Robocopy Source Root>robocopy . "C:\Temp\Robocopy Destination" /E /IF "Brushes*"
    
por 29.01.2012 / 05:40
0

O Robocopy não é projetado para fazer isso facilmente. No entanto, existe uma maneira.

A pasta raiz contém digamos 50 arquivos e 40 pastas. Você só quer a pasta X (mas também quer que seja hora e data).

ROBOCOPY c:\ d:\ /XF 50 root file names c:\boot.ini c:\bla.txt etc. /XD c:\windows c:\drivers c:\temp etc. /S /E /SEC /DCOPY:T

O / DCOPY: T diz para manter os carimbos de hora da pasta. O / XF especifica quais arquivos NÃO copiar, o / XD especifica quais pastas NÃO copiar. Apenas não especifique a pasta c: \ X.

A principal desvantagem disso é pesquisar todas as pastas e nomes de arquivos na raiz e chamá-los especificamente aqui. Se você está fazendo muito isso em sistemas diferentes, um script pode ser escrito.

Exemplo de trabalho

robocopy c: \ teste c: \ abc / XF c: \ teste \ Testing.txt / XD "C: \ teste \ Nova pasta (2)" "C: \ teste \ Nova pasta (3) "/ S / E / SEC / DCOPY: T

Exemplo de funcionamento da raiz

robocopy c: \ d: \ / C: \ Testing.txt / XD XF "C: \ Nova Pasta (2)" "C: \ Nova Pasta (3)" / S / E / SEC / DCOPY: T

Meu teste funcionou, criei algumas pastas e subpastas, c: \ testing era root nesse caso, c: \ abc era raiz de outra unidade (obviamente elas não são realmente, mas para esse propósito ele deveria fazer sentido). A pasta que eu queria da raiz era chamada "Nova Pasta", como você pode ver, eu não a especifiquei no / XD. Além disso, certifique-se de especificar o c: \ ou os nomes que você usa serão globais. Em outras palavras, se eu não especificasse c: \ testing no arquivo Testing.txt, ele seria omitido de TODAS as subpastas sendo copiadas. O / SEC copiará todos os registros de segurança e hora do arquivo.

    
por 29.01.2012 / 06:57
0

Em teoria, usar /DCOPY:T deve resolver todos os seus problemas.

Mas, eu vi isso acontecer, e não tenho certeza se chamaria isso de "bug", mas sim uma conseqüência da sequência de operações (OK, bug).

Este comando deve funcionar para copiar todos os arquivos de C:\Brushes para D:\NEWBrushes e /DCOPY:T deve fazer com que os carimbos de data e hora da pasta de origem sejam copiados para a pasta de destino:

robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T

O que eu vi (pelo menos em algumas versões do Robocopy) é que o comando é bem-sucedido, mas o timestamp da pasta D:\NEWBrushes está definido para a data e hora atuais.

Portanto, parece que o recurso /DCOPY:T não funciona para a pasta "base" (mais alta) que você está copiando.

Acredito que esteja funcionando, mas que o registro de data e hora da pasta de destino esteja sendo "pisado" por operações que estão mais tarde na sequência de operações.

O que eu acredito está acontecendo para este comando:

robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T

é algo assim:

  1. Crie a pasta D:\NEWBrushes , se ela ainda não existir
  2. Copie o registro de data e hora de C:\Brushes para D:\NEWBrushes
  3. Copie arquivos e subpastas de C:\Brushes para D:\NEWBrushes

Parece que na Etapa 3, a modificação do conteúdo da pasta D:\NEWBrushes faz com que o registro de data e hora de D:\NEWBrushes seja alterado.

Para mim, a "solução" foi executar o comando robocopy para copiar os arquivos e pastas e, em seguida, executar o comando (same) robocopy uma segunda vez.

Então, a primeira vez que você corre:

robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T

todos os arquivos e pastas serão copiados. Em seguida, execute-o novamente:

robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T
  (or)
robocopy "C:\Brushes" "D:\NEWBrushes" /DCOPY:T

Na segunda vez em que robocopy for executado, nenhum arquivo ou pasta dentro de D:\NEWBrushes será modificado, e a opção /DCOPY:T dirá a robocopy para copiar o registro de data e hora de C:\Brushes para D:\NEWBrushes (a menos que haja pastas / arquivos em C:\Brushes que foram alterados desde a primeira execução de robocopy ).

    
por 04.01.2016 / 18:39
-1

Eu estava resolvendo as pastas raiz agora mesmo para um script de backup realmente rápido e fácil com robocopy, há um exemplo. Deve ajudar a qualquer um:

$Destination="F:\Backup" #change destionation backup drive and foder
$BackupDirs="d:\folder1", "d:\folder2", "d:\folder3\subfolder", "d:\fodler4\subfolder\subsubfodler" #change source folders

#make a loop for every source folder
foreach ($Backup in $BackupDirs) {

#split folder name
$fdname = Split-Path $Backup -leaf

#define folder to create in destionation
$dirtocreate = Join-Path $Destination $fdname

#make directory, yes, some extra script to skip when exist should be in place, but -erroraction solved this in lazy mode :)
md $dirtocreate -ErrorAction SilentlyContinue 

#copy with subfolders and log
robocopy $backup $dirtocreate  /s /nfl /ndl /log:c:\scripts\backup.log

}
    
por 02.09.2017 / 22:06

Tags