批处理文件让电脑定期自动备份数据

由于人力、财力、智力等一系列问题,虽然公司有专门的信息技术部,但我们票券组的同事仍在使用Excel表格来作记录,真是可悲又可哀啊!可怜去年还是使用记事本来记录票券资料,今年好不容易进步了一点点,就是建个Excel表格来处理数据,在同事的努力下,已完相对较完善了。但问题还是不少,比如偶尔出错、记录丢失、误删除……等乱七八糟的问题。这不,昨天又向我抱怨数据表丢失了一个,我不寒而粟,一想到服务器上的目录谁都有读写权限,如果哪位同事不小心一个Del所有文件,后果将是无法估量的。

我相信仍然还有许多公司跟我们公司一样:IT靠得住,母猪会上树。既然IT靠不住,那她们只好求助我这个伪技术啦!说了这么多的废话,其实就是想提供一个小弟多日的研究成果,自动备份Excel表格的解决方案。

初步设想建个BAT文件来处理备份这种事情,但既然是备份,肯定不能只保存一个版本,我的计划是让电脑随时可以执行Backup。于是如果将备份下来的文件名添加上日期成了我头痛的事情,在网上找了很多变量都不适合,如果要结合VB那就太麻烦了点。

既然使用日期来区分备份文件不行,那就使用随机数吧!隐约记得“%RANDOM%”可以使用。当这一问题成功解决之后,新的问题是如何区分备份的版本?于是我又加条命令实现备份日志——log。

备份这事是没问题了,但每次都要手动执行,肯定比较麻烦。于是我想到自动执行,想到自动的时候就想到了组策略。不过不好意思,公司的电脑全部只有Users组的权限,于是这条路被堵了。折腾来折腾去后我发现,可以使用Windows的计划任务功能来实现(之前从没使用过这破玩意)。好了,每天下班之前,计算机会自动将远程服务器上的文件备份到本地。调试的时候,阿珍问我如果备份的文件名换了是不是就没用了?而且只能备份一个文件吗?解决方案就是使用Winrar的压缩命令找包整个目录,于是再改进就有了下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@REM 在下面填写备份路径和文件名
@set DEF_INITPATH=D:\backup\
@cls
@color CC
:SelectRandomFileName
@set DEF_BACKPATH=%DEF_INITPATH%9月销售明细%RANDOM%.rar
:@if exist %DEF_BACKPATH% goto SelectRandomFileName
@echo %Date% %TIME% 备份到%DEF_BACKPATH%>>%DEF_INITPATH%/log/Backup.log
:@copy \\10.10.1.175\public\ContactCenter\度假中台专用\个人工作站信息\票务同事工作站\票务同事每日需要完成的表格\9月销售明细.xls %DEF_BACKPATH%

@C:
@cd Program Files\WinRAR\
@WinRAR.exe a -k -r -s -m1 %DEF_BACKPATH% \\10.10.1.175\public\ContactCenter\度假中台专用\个人工作站信息\票务同事工作站\票务同事每日需要完成的表格\

@color
@cls
@echo %Date% %TIME% 备份到%DEF_BACKPATH%

将上面的文件保存为Back.bat,然后在D盘建立Backup目录,在该目录下建立/log/bakckup.log文件。然后修改你要备份的源目录路径即可运行,我懒了点,其实可以将所有的设置成为变量,统计在文件开始的时候声明。

目前我选择的是压缩方式,但有一个问题点仍没找到解决方案。就是只要被备份的文件处于打开状态,Winrar就压缩不了。所以我将计划任务设置成每个开机前执行Back.bat,如有更好解决方法,欢迎指教。