Vbs脚本实现数据CUT备份及自动轮询删除备份数据
我们上一篇文章中介绍了使用vbs脚本不同版本的office激活任务,其实说到vbs脚本相信大家都很了解了,有什么作用呢,其实说白了就是执行批处理任务的工具。Vbs在windows上应用相对比较多,其功能上我们就不多说了,今天呢还是介绍vbs脚本程序备份数据的计划任务。怎么想起来备份数据呢,近期呢,领导突然想到对公司的SAP备份数据进行异地备份,这样能提高数据的可恢复性;公司的SAP的系统是每天晚上2点执行一次备份,然后新的一天数据会覆盖旧的数据,如果当数据出现错误,我们也无法使用该之前的备份进行恢复。再加上SAP数据盘我们当时给的磁盘空间不大,仅仅为40G左右,但备份数据就有37G,所以就进行了备份数据的再次备份。具体见下:
当前服务的状态图,我们的备份数据存放在D盘下:该盘为共享磁盘。
我们需要将共享磁盘中;DBBackup下的数据全部备份
DBBackup下有4个文件夹均要备份;其中PRD中的数据为最大为:37G
所以我们就通过vbs脚本定义将D盘下SQLAPPDISK下的DBBackup下的所有文件进行异地备份(剪贴);
代码定义:将指定目录下的所有文件进行移动(剪贴)
sourcefilespath="D:\file" desfilepath="d:\file_backup\12"&""&Year(date)&-Month(date)&-Day(date)&" "&Hour(time)&-Minute(time)&"\" Set fso=CreateObject("Scripting.FileSystemObject") If Not fso.FolderExists(desfilepath) Then fso.CreateFolder desfilepath 'fso.copyfile 为复制文件 'fso.copyfile sourcefilepath,desfilepath 'fso.movefile 移动文件 MoveFiles sourcefilespath,desfilepath End If Function MoveFiles(yPath,sPath) On Error Resume Next Dim folder,Files,File,subFolder,subFolders Set fso = createobject("scripting.FileSystemObject") Set Folder = fso.getFolder(yPath) Set Files = Folder.Files 'msgbox yPath & sPaht For Each File In Files fso.MoveFile File,sPath&"\" 'msgbox File Next Set subFolder = Folder.SubFolders For Each subFolders In subFolder folderTemp = Split(subFolders,"\") FolderName=FolderTemp(ubound(folderTemp)) fso.createFolder(sPath&"\"&FolderName) MoveFiles subFolders,sPath&"\"&FolderName&"\" fso.DeleteFolder subFolders Next End Function 'msgbox "ok"
我们需要将D盘下file文件夹下的所有文件移动到D盘下的File_backup文件夹下,并且以当前的备份时间进行命名(注:因为真实环境下不方便演示,所以就模拟环境进行演示)
开始执行代码;文件移动完成,并且以时间日期命名成功过
那如果要拷贝(Copy)指定文件下下的某个文件,我们需要修改代码了
sourcefilepath="c:\names\names.nsf" desfilepath="d:\name_backup\Name"&""&Year(date)&-Month(date)&-Day(date)&" "&Hour(time)&-Minute(time)&"\" Set fso=CreateObject("Scripting.FileSystemObject") If Not fso.FolderExists(desfilepath) Then fso.CreateFolder desfilepath 'fso.copyfile 为复制文件 fso.copyfile sourcefilepath,desfilepath 'fso.movefile 移动文件 'fso.movefile sourcefilepath,desfilepath End If
如果需要将指定文件夹下的所有文件(文件夹下只有文件,没有目录),可以参考下面代码
sourcefilespath="d:\file\*.*" desfilepath="d:\file_backup\Back-Time"&""&Year(date)&-Month(date)&-Day(date)&" "&Hour(time)&-Minute(time)&"\" Set fso=CreateObject("Scripting.FileSystemObject") If Not fso.FolderExists(desfilepath) Then fso.CreateFolder desfilepath 'fso.copyfile 为复制文件 'fso.copyfile sourcefilepath,desfilepath 'fso.movefile 移动文件 fso.movefile sourcefilespath,desfilepath End If
最后,我们说一下,如果我们通过计划任务执行多次数据备份的话,时间长了,我们的磁盘空间就会不足,为了保证磁盘空间的充足,我们再次使用vbs脚本对数据进行的保留进行判断删除。再次比如我们保留3天的数据,依次根据执行时间进行判断将最旧的时间数据删除,依次轮询删除;由于是总结,所以为了体现试验的完整性,我们在不同时间段进行文件的创建,来保证实现vbs通过最后的更改时间进行判断删除
set fso = createobject("scripting.filesystemobject") Set dic = createobject("scripting.dictionary") set fods = fso.getfolder("D:\file_backup") set fis=fods.SubFolders for each fi in fis str1=str1& Trim(fi.datelastmodified) &"|" dic.add Trim(fi.datelastmodified),fi.path 'msgbox fi.datelastmodified &" : "&fi.path ' msgbox dic.item(fi.datelastmodified) next str1=Left(str1,Len(str1)-1) strArray = Split(str1,"|",-1) 'msgbox ubound(strArray) Set sortArray = fSortArray(strArray) If Ubound(strArray)>=3 Then For i=Lbound(strArray) To Ubound(strArray)-5 'msgbox sortArray(i) 'msgbox dic.item(Trim(sortArray(i))) fso.DeleteFolder dic.item(Trim(sortArray(i))) Next End If Function fSortArray(aSortThisArray) Dim oArrayList, iElement Set oArrayList = CreateObject( "System.Collections.ArrayList" ) For iElement = 0 To UBound(aSortThisArray) oArrayList.Add aSortThisArray(iElement) Next oArrayList.Sort set fSortArray = oArrayList End Function
如果代码没有问题正确的我们应该会提示删除file2015-9-6 20:26:
因为通过时间判断只有该文件最旧
开始执行
执行完成
最后我们只需要将该基本通过系统自带的任务计划运行即可
开始运行taskschd.msc即可打开计划任务管理控制台
选择执行规则
本文出自 “高文龙” 博客,谢绝转载!