如何从服务器备份文件并保留最后 n 个版本?

如何从服务器备份文件并保留最后 n 个版本?

我正在尝试创建一个批处理脚本,将 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

忘记日期,因为您每天将运行脚本固定次数。只需对文件进行编号即可实现如下所示的效果。每个文件的修改日期戳将指示备份的进行时间。

  • 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
)

然后是你的 robocopy 行。

如果要处理很多文件,您可以改用 for 循环。但是,您可能需要考虑改用 powershell 来利用其更高级的功能。在批处理文件变得过于根深蒂固于您的流程之前,以后的切换会变得更加困难。

请注意,在第一次运行此脚本之前,必须已经存在一个名为 "C:\Teknia Shares\Respaldos\Sistemas\SuperCEP\scep2012.mdb"

答案2

时间间隔

Timegaps 是一个跨平台的命令行程序。它根据每个项目的年龄和用户指定的时间分类规则,将一组项目分类为拒绝项目和接受项目。

时间间隔允许精简项目集合,而接受项目之间的时间间隔会随着项目年龄的增长而变大。这对于实施备份保留策略非常有用,目标是使备份在时间上“呈对数”分布,例如过去 24 小时每天一个,过去 30 天每天一个,过去 8 周每天一个,等等。

相关内容