| 网站首页 | 新闻中心 | 系统安全 | 网络安全 | 安全技术 | 下载中心 | 
课件制作网.
收藏本站
设为首页
安全365
如何删除前一天创建的备份文件?
如何删除前一天创建的备份文件?
作者:佚名 文章来源:不详 点击数: 更新时间:2007-1-24 11:02:50
问:

您好,脚本专家!有一个程序每天都会创建一个具有类似于以下名称的文件: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

就像这样,昨天已逝,我们可以全都装作它从未发生过一样。对吗,老板?

注意:难道就不能省去这一切麻烦,简单地删除所有创建/修改日期等于前一天日期的文件吗?可以,只要该文件夹中决不会存在具有相同日期因而可能会被意外删除的任何其他文件就行。综合考虑各种因素,上述做法似乎是最为安全的。

【转自世纪安全网 http://www.21safe.com】
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
     
     
     
    CSO们如何应对新技术的安
    普通企业如何应对黑客攻
    企业该如何防范由VoIP引
    浅谈IT如何实现企业的应
    黑客与正规企业是如何串
    如何无限制申请Gmail 2.
    企业如何避免人为因素的
    社会工程学:如何利用黑客
    如何在一个文件被添加到
    如何将“珊瑚虫”好友请

    Copyright © 2006-2008 www.anquan365.com 安全365
    建议使用1024*768分辨率及第三方浏览器对本站进行浏览