当前位置: 首页 > 图文教程 > 脚本技术 > VBScript > 用vbs删除前一天创建的备份文件

VBScript
用vbs脚本来关闭 HTML 页面的代码
用vbs实现确定是否安装了某个特定的补丁
用vbs确定用户的登录名的代码
用vbs找到映射到共享的所有驱动器并重新映射它们
可以从一台远程服务器运行 SP2 安装程序Install.vbs
用vbs判断一个日期是否在指定的时段内
vbs+hta中实现在单个 onClick 参数中包括多个子例程的代码
vbs中实现启动两个应用程序,一直等到其中一个程序结束,然后关闭另一个?
用vbs实现对文本文件中的项计数
用vbs对文本文件的内容进行排序
用vbscript把 Word 文档保存为文本文件的代码
用vbs返回 Internet Explorer 的下载控件和 Applet 的列表
用vbscript合并多个文本文件的代码
用vbscript防止本地用户更改其密码
用vbs针对一个 IP 地址范围运行脚本
用vbs 实现从剪贴板中抓取一个 URL 然后在浏览器中打开该 Web 站点
使用vbscript脚本在表单中进行选择的代码
一个把任何文件转成批处理的vbs脚本Any2Bat.vbs
windows脚本调试howto的方法
注册表的禁用与解锁方法集合

VBScript 中的 用vbs删除前一天创建的备份文件


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-11   浏览: 58 ::
收藏到网摘: n/a

问:
您好,脚本专家!有一个程序每天都会创建一个具有类似于以下名称的文件:backup_20050607.bak。如何才能删除前一天的文件呢?
-- JC
答:
您好,JC。嗯,可以调用一个脚本自动删除前一天产生的任何文件。伙计,就在几周前我们曾用过一个类似这样的脚本!
是的,我们还有印象。但往事不能重提。
除此之外,我们还要在此写一个专栏。您需要一个脚本来删除名如 backup_20050607.bak(其中,20050607 表示前一天,在本例中即为 2005 年 6 月 7 日)的文件,对吗?您需要做的一切就是使用:
复制代码 代码如下:

dtmYesterday = Date - 1
strYear = Year(dtmYesterday)
strMonth = Month(dtmYesterday)
If Len(strMonth) = 1 Then
strMonth = "0" & strMonth
End If
strDay = Day(dtmYesterday)
If Len(strDay) = 1 Then
strDay = "0" & strDay
End If
strYesterday = strYear & strMonth & strDay
strFileName = "C:\Backups\backup_" & strYesterday & ".bak"
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile(strFileName)

您可能已经料道,这里最为棘手的部分就是构建文件名;有了文件名后,删除文件就是小事一桩了。那么,我们该如何构建该文件名呢?
对,文件名中每天都会发生变化的那一部分就是表示备份文件生成日期的那个部分。也就是说,我们所要做的全部事情就是构建文件名的这个部分,其它部分可以采用硬编码来加入。因此,我们需要从确定前一天的日期开始,这可通过将当前日期减去一,然后该值存入一个名为 dtmYesterday 的变量来完成:
dtmYesterday = Date - 1
接下来,使用 Year 函数从 dtmYesterday 取得四位数字的年份值(例如 2005);该值将被存储在变量 strYear 中。紧接着使用 Month 函数从 dtmYesterday 取得月份值。
但是请注意,对于月份值须得另外再进行一些编码(对于日期也是如此)。为什么呢?是这样,假定我们所处理的是六月份。此时,Month 函数将返回值 6。这并没有什么问题,只不过在我们的文件名中为月份分配了两位数字;需要将月份以 06 形式列出。因此,我们必须确定所得到的月份是一位数字还是两位数字。如果是一位数字的月份,则必须在数字前面加零。我们就是象下面这样做的:
If Len(strMonth) = 1 Then
strMonth = "0" & strMonth
End If
这段代码真的是一目了然。Len(长度)函数会告诉我们 strMonth 变量中有多少位数字。如果只有 1 位,则添加前导 0:
strMonth = "0" & strMonth
如果长度为 1 之外的任何值,则只需保持原样即可。
取得月份值后,用函数 Day 重复同一过程,以便能检索出日期的天部分。该值将被存储在巧妙命名的变量 strDay 中。
这样便提供了我们构建文件名所需的全部数据。为此,首先要使用下面这行代码将年月日合在一起(得到类似 20050607 的字符串):
strYesterday = strYear & strMonth & strDay
然后,只需附加其余的路径信息(在本例中,假定文件存储在文件夹 C:\Backups 下):
strFileName = "C:\Backups\backup_" & strYesterday & ".bak"
如您所见,我们只需将字符串 C:\Backups\backup_、所构建的日期 (20050607) 以及 .bak 合并起来即可。将它们组合在一起之后将会得到类似下面的结果:
C:\Backups\backup_20050607.bak
很酷吧。
然后,我们将使用下面这两行代码创建一个 FileSystemObject 实例并删除文件:
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile(strFileName)
由于使用了 FileSystemObject,由于使用了 FileSystemObject,所以这一脚本只能在本地机上运行。但如果备份文件位于远程计算机上,该怎么办呢?没问题,此时可以使用 WMI 找到并删除该文件。那么,为什么不最先就使用 WMI 呢?是这样,FileSystemObject 用不了一秒钟就能找到并删除文件,而 WMI 所需的时间则稍长一些。我们决定以速度和效率为先。
但正如我们所说的,如果文件位于远程计算机上,则速度和效率并不会给您带来太多好处。幸运的是,在这种情况下可以使用 WMI 脚本删除文件。以下脚本(今天暂且不对其进行讨论)将从名为 atl-fs-01 的远程计算机上删除备份文件:
复制代码 代码如下:

dtmYesterday = Date - 1
strYear = Year(dtmYesterday)
strMonth = Month(dtmYesterday)
If Len(strMonth) = 1 Then
strMonth = "0" & strMonth
End If
strDay = Day(dtmYesterday)
If Len(strDay) = 1 Then
strDay = "0" & strDay
End If
strYesterday = strYear & strMonth & strDay
strFileName = "C:\\Backups\\backup_" & strYesterday & ".bak"
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery _
("Select * from CIM_DataFile where Name = '" & strFileName & "'")
For Each objFile in colFiles
objFile.Delete
Next
就像这样,昨天已逝,我们可以全都装作它从未发生过一样。对吗,老板?
注意:难道就不能省去这一切麻烦,简单地删除所有创建/修改日期等于前一天日期的文件吗?可以,只要该文件夹中决不会存在具有相同日期因而可能会被意外删除的任何其他文件就行。综合考虑各种因素,上述做法似乎是最为安全的。