Vbs脚本实现数据CUT备份及自动轮询删除备份数据

简介:

我们上一篇文章中介绍了使用vbs脚本不同版本的office激活任务,其实说到vbs脚本相信大家都很了解了,有什么作用呢,其实说白了就是执行批处理任务的工具。Vbs在windows上应用相对比较多,其功能上我们就不多说了,今天呢还是介绍vbs脚本程序备份数据的计划任务。怎么想起来备份数据呢,近期呢,领导突然想到对公司的SAP备份数据进行异地备份,这样能提高数据的可恢复性;公司的SAP的系统是每天晚上2点执行一次备份,然后新的一天数据会覆盖旧的数据,如果当数据出现错误,我们也无法使用该之前的备份进行恢复。再加上SAP数据盘我们当时给的磁盘空间不大,仅仅为40G左右,但备份数据就有37G,所以就进行了备份数据的再次备份。具体见下:

当前服务的状态图,我们的备份数据存放在D盘下:该盘为共享磁盘。

clip_image002

我们需要将共享磁盘中;DBBackup下的数据全部备份

clip_image004

DBBackup下有4个文件夹均要备份;其中PRD中的数据为最大为:37G

clip_image006

所以我们就通过vbs脚本定义将D盘下SQLAPPDISK下的DBBackup下的所有文件进行异地备份(剪贴);

clip_image008

代码定义:将指定目录下的所有文件进行移动(剪贴)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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文件夹下,并且以当前的备份时间进行命名(注:因为真实环境下不方便演示,所以就模拟环境进行演示)

clip_image010

开始执行代码;文件移动完成,并且以时间日期命名成功过

clip_image012

clip_image014

那如果要拷贝(Copy)指定文件下下的某个文件我们需要修改代码了

clip_image016

1
2
3
4
5
6
7
8
9
10
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

如果需要将指定文件夹下的所有文件(文件夹下只有文件,没有目录),可以参考下面代码

1
2
3
4
5
6
7
8
9
10
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通过最后的更改时间进行判断删除

clip_image018

clip_image020

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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:

因为通过时间判断只有该文件最旧

clip_image021

开始执行

clip_image023

执行完成

clip_image025

最后我们只需要将该基本通过系统自带的任务计划运行即可

开始运行taskschd.msc即可打开计划任务管理控制台

wKiom1XsNYHg1YePAARy2IFUTGI189.jpg选择执行规则

wKioL1XsN9yhWmOBAAPAAl3uVbc729.jpg




本文转自 高文龙 51CTO博客,原文链接:http://blog.51cto.com/gaowenlong/1692033,如需转载请自行联系原作者

相关文章
|
关系型数据库 MySQL 数据库
【赵渝强老师】MySQL的参数文件
MySQL启动时会读取配置文件my.cnf来确定数据库文件位置及初始化参数。该文件分为Server和Client两部分,包含动态与静态参数。动态参数可在运行中通过命令修改,而静态参数需修改my.cnf并重启服务生效。文中还提供了相关代码示例和视频教程。
287 6
|
网络虚拟化
无线基础知识:直接转发和隧道转发有何区别?
无线基础知识:直接转发和隧道转发有何区别?
1097 4
|
机器学习/深度学习 人工智能 自然语言处理
AIGC最近很火,给大家推荐一个已经有1000位开发者使用的中文aigc开源模型,包括ai画图、ai聊天
作为2022年以来AI圈最大的趋势,AIGC意味着,AI进军到了此前被视为“人类独占”的领域,如艺术表达、科学发现。
2297 0
AIGC最近很火,给大家推荐一个已经有1000位开发者使用的中文aigc开源模型,包括ai画图、ai聊天
|
机器学习/深度学习 人工智能 自然语言处理
AI大模型的核心成功因素通常可以归结为三大要素:大数据、大算力和强算法。
AI大模型的核心成功因素通常可以归结为三大要素:大数据、大算力和强算法。
2905 0
|
JavaScript 小程序 Java
选课|基于Springboot的大学生选课系统设计与实现(源码+数据库+文档)
选课|基于Springboot的大学生选课系统设计与实现(源码+数据库+文档)
503 0
|
Python
在Python中,如何使用装饰器重写类的方法?
【2月更文挑战第24天】【2月更文挑战第79篇】在Python中,如何使用装饰器重写类的方法?
457 2
|
缓存 NoSQL Java
基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖微信小程序端(十一)
基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖微信小程序端(十一)
|
机器学习/深度学习 自然语言处理 算法
【ACL2023】基于电商多模态概念知识图谱增强的电商场景图文模型FashionKLIP
从大规模电商图文数据中自动化构建多模态概念级知识图谱的方案,随后将概念级多模态先验知识注入到VLP模型中,以实现跨模态图文样本在概念层面进一步对齐。
|
SQL 消息中间件 存储
Apache Flink 在翼支付的实践应用
翼支付高级大数据工程师尹春光,在 Flink Forward Asia 2022 行业案例专场的分享。
867 0
Apache Flink 在翼支付的实践应用
|
人工智能 JavaScript 程序员
GitHub原生AI代码生成工具Copilot,官方支持Visual Studio 2022
GitHub原生AI代码生成工具Copilot,官方支持Visual Studio 2022
987 0