时间:2021-05-22
问:
您好,脚本专家!有一个程序每天都会创建一个具有类似于以下名称的文件:backup_20050607.bak。如何才能删除前一天的文件呢?
--JC
答:
您好,JC。嗯,可以调用一个脚本自动删除前一天产生的任何文件。伙计,就在几周前我们曾用过一个类似这样的脚本!
是的,我们还有印象。但往事不能重提。
除此之外,我们还要在此写一个专栏。您需要一个脚本来删除名如backup_20050607.bak(其中,20050607表示前一天,在本例中即为2005年6月7日)的文件,对吗?您需要做的一切就是使用:
复制代码 代码如下:
dtmYesterday=Date-1
strYear=Year(dtmYesterday)
strMonth=Month(dtmYesterday)
IfLen(strMonth)=1Then
strMonth="0"&strMonth
EndIf
strDay=Day(dtmYesterday)
IfLen(strDay)=1Then
strDay="0"&strDay
EndIf
strYesterday=strYear&strMonth&strDay
strFileName="C:\Backups\backup_"&strYesterday&".bak"
SetobjFSO=CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile(strFileName)
您可能已经料道,这里最为棘手的部分就是构建文件名;有了文件名后,删除文件就是小事一桩了。那么,我们该如何构建该文件名呢?
对,文件名中每天都会发生变化的那一部分就是表示备份文件生成日期的那个部分。也就是说,我们所要做的全部事情就是构建文件名的这个部分,其它部分可以采用硬编码来加入。因此,我们需要从确定前一天的日期开始,这可通过将当前日期减去一,然后该值存入一个名为dtmYesterday的变量来完成:
dtmYesterday=Date-1
接下来,使用Year函数从dtmYesterday取得四位数字的年份值(例如2005);该值将被存储在变量strYear中。紧接着使用Month函数从dtmYesterday取得月份值。
但是请注意,对于月份值须得另外再进行一些编码(对于日期也是如此)。为什么呢?是这样,假定我们所处理的是六月份。此时,Month函数将返回值6。这并没有什么问题,只不过在我们的文件名中为月份分配了两位数字;需要将月份以06形式列出。因此,我们必须确定所得到的月份是一位数字还是两位数字。如果是一位数字的月份,则必须在数字前面加零。我们就是象下面这样做的:
IfLen(strMonth)=1Then
strMonth="0"&strMonth
EndIf
这段代码真的是一目了然。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实例并删除文件:
SetobjFSO=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)
IfLen(strMonth)=1Then
strMonth="0"&strMonth
EndIf
strDay=Day(dtmYesterday)
IfLen(strDay)=1Then
strDay="0"&strDay
EndIf
strYesterday=strYear&strMonth&strDay
strFileName="C:\\Backups\\backup_"&strYesterday&".bak"
strComputer="."
SetobjWMIService=GetObject("winmgmts:\\"&strComputer&"\root\cimv2")
SetcolFiles=objWMIService.ExecQuery_
("Select*fromCIM_DataFilewhereName='"&strFileName&"'")
ForEachobjFileincolFiles
objFile.Delete
Next
就像这样,昨天已逝,我们可以全都装作它从未发生过一样。对吗,老板?
注意:难道就不能省去这一切麻烦,简单地删除所有创建/修改日期等于前一天日期的文件吗?可以,只要该文件夹中决不会存在具有相同日期因而可能会被意外删除的任何其他文件就行。综合考虑各种因素,上述做法似乎是最为安全的。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言前期误操作,导致数据库表删除,虽然数据量不多,但是通过binlog恢复比较麻烦,通过备份文件来恢复,备份文件达36个G打开都是问题;使用备份文件恢复大文件编
Word2010中,通过启用自动创建备份文件功能,可以在每次经过修改而保存Word文档时自动创建一份备份文件。一起来了解下吧!软件名称:MicrosoftOff
为了保证Word文档在损坏或被非法修改后能更有效地挽回损失,用户可以启用Word2007自动创建备份文件的功能。通过启用自动创建备份文件功能,可以在每次经过修改
终于让服务器每天早上备份一次MySQL数据库并自动打包,同时删除5天前的备份文件。分享如下:1.环境:windowsserver2003+Apache2.0+P
1.日志删除策略自动删除7天前的归档日志与备份文件。2.调度计划00***nohupsh/db2backup/script/auto_rm_logs.sh&3.