Robocopy, não sobrescreva arquivos existentes, mas copie os novos / modificados

5

É possível espelhar os dois diretórios sem sobrescrever os arquivos no diretório de destino com arquivos novos / alterados / excluídos. Algo como instantâneos.

Exemplo: Copie o diretório de origem com todos os arquivos e subdiretórios para o diretório de destino, mas se o diretório de destino contiver, por exemplo, o arquivo A.xls e A.xls foi alterado no diretório de origem, copie A.xls , mas mantenha oA anterior no diretório de destino também. Para preservar o arquivo anterior, um registro de data ou contador pode ser adicionado ao nome do arquivo.

Exemplo após a cópia:
SomeDirectory
| --A.xls
| --A_20120701.xls
| --A_20120920.xls

Obrigado.

    
por I don't know. 24.09.2012 / 13:31

2 respostas

5

Não, isso não é possível usando o Robocopy. Espelhar um caminho de pasta usando o Robocopy excluirá os arquivos no destino se eles não existirem mais na origem. Você pode garantir que não sobrescreva arquivos com versões mais antigas, mas não poderá manter versões / renomeações mais antigas durante o processo de cópia.

Eu escrevi um script de comando / arquivo em lote que copia arquivos modificados, mas cria a estrutura em árvore com base na data em que o script é executado

por exemplo. minha árvore para um arquivo em particular seria.

c:\_archive1209\
                    23\
                        0930
                             Todays notes.txt
                        1145
                             Todays notes.txt
                    24\
                        1000
                             Todays notes.txt

Eu poderia postar uma amostra desse script se você achar isso útil.

Devido à demanda popular, encontre abaixo meu script de backup básico.

@echo off
cls
rem parse the output of the date /t command to create a date in the format yyyymmdd, and also remove the delimiter (/)
rem  store the results in environment variables
for /F "tokens=1,2,3,4 delims=/ " %%i IN ('date /t') do SET Z_DATE=%%k%%j%%i 
for /F "tokens=1,2,3,4 delims=/ " %%i IN ('date /t') do SET Z_YEAR=%%k
for /F "tokens=1,2,3,4 delims=/ " %%i IN ('date /t') do SET Z_MONTH=%%j
for /F "tokens=1,2,3,4 delims=/ " %%i IN ('date /t') do SET Z_DAY=%%i

echo date %Z_DATE%
echo year %Z_YEAR%
echo month %Z_MONTH%
echo day %Z_DAY%

rem parse the output of the time /t command to remove the delimeter (:)
rem  store the result in an environment variable
for /f "tokens=1,2 delims=:. " %%i IN ('time /t') do SET Z_TIME=%%i%%j

echo time %Z_TIME%
rem change the colour to a nice deep green on black.
color 02
::-------------------------

@echo on
xcopy "c:\MyFiles\*.*" "C:\MyArchive\ByDate\%Z_YEAR%%Z_MONTH%\%Z_DAY%\%Z_TIME%%~p1%~n1\" /ksymhr
@if @@ERRORLEVEL==1 SET Z_BACKUP_ERROR_FLAG=1

Goto End

::---------------------------------------------------------------------------
:NotifyUser
echo.
echo An error occurred during the backup.
echo.
pause

::---------------------------------------------------------------------------
:End

echo %Z_DATE%
echo %Z_TIME%
time /t

rem Clear out the environment variables
SET Z_DATE=
SET Z_TIME=
SET Z_BACKUP_ERROR_FLAG=

se você tiver alguma dúvida sobre esse script (eu o copiei rapidamente do meu script de backup principal e não o teste completamente), envie-me por e-mail para minha conta do Gmail com a linha de assunto 'Consulta de script de falha de servidor'. Se você puder resolver meu endereço do Gmail sem perguntar, ficarei feliz em ajudá-lo.

    
por 24.09.2012 / 13:53
0

As linhas para analisar data, ano, mês e dia não funcionaram para mim. No entanto, isso aconteceu e o resto do script funciona perfeitamente:

Defina Z_Date =% date: ~ 10,4 %% date: ~ 4,2 %% date: ~ 7,2%

Definir Z_Year =% date: ~ 10,4%

Definir Z_Month =% date: ~ 4,2%

Defina Z_Day =% date: ~ 7,2%

    
por 25.05.2018 / 11:34