Как сделать резервную копию файла с сервера и сохранить последние n версий?

642
Chico3001

Я пытаюсь создать пакетный сценарий для резервного копирования Access Db с сервера NAS на другой сервер и сохранения последних «n» версий этого файла (n зафиксировано внутри сценария), этот сценарий будет выполняться дважды каждый день

Проблема сейчас в том, что когда я копирую файл, robocopyон не обновляет дату изменения и из-за этого forfilesне может обнаружить последние дни

Другая проблема заключается в том, что мне нужно сохранить последние n файлов, а удалять forfilesтолько через n дней. Есть ли способ добиться этого?

Вот мой сценарий до сих пор:

@echo off  set numver=20 set datetime=%date:~-2%%date:~3,2%%date:~0,2%t%time:~0,2%%time:~3,2% set filename=scep2012.mdb set origin=\\supercepsrv\supercep set destin=C:\Teknia Shares\Respaldos\Sistemas\SuperCEP  robocopy "%origin%" "%destin%" %filename% /r:0 /w:2 ren "%destin%\%filename%" "%datetime%_%filename%" forfiles -p "%destin%" /s /m *.* /d %numver% /c "cmd /c del @path"  :end 
1

1 ответ на вопрос

0
BeowulfNode42

Забудьте о днях, так как вы будете запускать скрипт фиксированное количество раз в день. Просто пронумеруйте файлы, чтобы получить что-то вроде ниже. Марка с измененной датой каждого файла будет указывать, когда была сделана резервная копия.

  • C: \ Teknia Shares \ Respaldos \ Sistemas \ SuperCEP \ scep2012.mdb (последняя резервная копия)
  • C: \ Teknia Shares \ Respaldos \ Sistemas \ SuperCEP \ scep2012.mdb.1
  • C: \ Teknia Shares \ Respaldos \ Sistemas \ SuperCEP \ scep2012.mdb.2
  • C: \ Teknia Shares \ Respaldos \ Sistemas \ SuperCEP \ scep2012.mdb.3
  • C: \ Teknia Shares \ Respaldos \ Sistemas \ SuperCEP \ scep2012.mdb.4 (самая старая резервная копия)

тогда в твоем скрипте есть

if EXIST "C:\Teknia Shares\Respaldos\Sistemas\SuperCEP\scep2012.mdb" ( del "C:\Teknia Shares\Respaldos\Sistemas\SuperCEP\scep2012.mdb.4" ren "C:\Teknia Shares\Respaldos\Sistemas\SuperCEP\scep2012.mdb.3" scep2012.mdb.4 ren "C:\Teknia Shares\Respaldos\Sistemas\SuperCEP\scep2012.mdb.2" scep2012.mdb.3 ren "C:\Teknia Shares\Respaldos\Sistemas\SuperCEP\scep2012.mdb.1" scep2012.mdb.2 ren "C:\Teknia Shares\Respaldos\Sistemas\SuperCEP\scep2012.mdb" scep2012.mdb.1 ) 

тогда ваша линия робокопии.

Если их будет много, вы можете вместо этого сделать цикл for. Однако вы можете рассмотреть возможность перехода на использование PowerShell, чтобы использовать его более продвинутые функции. До того, как пакетный файл станет слишком укоренившимся в вашем процессе, переключение позже станет намного более трудным.

Обратите внимание, что прежде чем запускать этот скрипт в первый раз, уже должен существовать файл с именем "C:\Teknia Shares\Respaldos\Sistemas\SuperCEP\scep2012.mdb"