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

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

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

时间: 2024-10-26 06:03:12

用vbs删除前一天创建的备份文件_vbs的相关文章

使用 Iisftpdr.vbs 删除FTP虚拟目录(支持本地与远程)_vbs

应用到: Windows Server 2003, Windows Server 2003 R2, Windows Server 2003 with SP1 可以使用命令行脚本 iisftpdr.vbs(存储在 systemroot\System32 中)在运行带有 IIS 6.0 的 Windows Server 2003 家族成员的本地或远程计算机上删除 FTP 虚拟目录.该命令不创建或破坏内容,而只是删除虚拟目录结构. 不应使用此命令删除 FTP 站点,因为这些站点可能仍被列出但已部分禁用

使用vbs删除host文件域址内容_vbs

要求:原先host里面已增加以下3行 202.102.101.105 intranet.corp 202.102.101.107 mail.intranet.corp 202.102.101.108 sip.intranet.corp 之后不需要此3行内容,所以运行以上vbs代码,来删除host文件此3行 '该脚本要求执行用户有本地管理员权限 Const ForReading = 1, ForWriting = 2, ForAppending = 8, ReadOnly = 1 Set fso

用vbs控制iis创建虚拟目录

参照了InetpubAdminScriptsadsutil.vbs写的创建虚拟目录的脚本:'////////////////////////// begin //////////////////////////////////////////On Error Resume NextstrVirtualDirectoryName = InputBox("请输入虚拟目录名")If strVirtualDirectoryName = "" Then msgbox(&quo

应用-c# 如何通过代码删除删除程序创建的快捷方式?

问题描述 c# 如何通过代码删除删除程序创建的快捷方式? d盘有一个a.exe 的程序 代码是这么写的 WshShell shell = new WshShell(); //快捷键方式创建的位置.名称 IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut( Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "" + "上

vbscript-关于VBS删除Excel的Sheet问题

问题描述 关于VBS删除Excel的Sheet问题 如题,代码如下,执行后3个sheet原封不动的在那儿并未成功删除掉第一个sheet, 求助,帮忙寻找解决方法 '?获得Sheet的值.查看获得Sheet值得方法 ' '========================================= 'myString = "CreateExcel" Dim oExcel,oBook,oSheet Dim filePath Dim getValue,getValue2 Dim fso

mysql存储过程查看,修改,删除,创建方法

mysql教程存储过程查看,修改,删除,创建方法 文章主要简单的介绍关于mysql存储过程查看,修改,删除,创建的方法哦,下面举了四个实例来证明一下关于存储过程的操作. 询数据库教程中的存储过程: 方法一:(直接查询) select `specific_name` from mysql.proc where db = 'your_db_name' and `type` = 'procedure' 方法二:(查看数据库里所有存储过程+内容) show procedure status; 方法三:(

SAS112如何在CLI模式下删除手动创建的主机?

原因分析: SAS112在CLI模式下删除手动创建的主机.但是此方法不能删除发现或映射的主机.对于手动创建的映射主机,必须取消映射,才能删除. 解决方案: delete host 说明:删除手动创建的主机.不删除发现或映射的主机.对于手动创建的映射主机,必须取消映射,才能删除它. 语法:delete host host 参数:host  主机的 ID 或昵称. 示例: 删除手动创建的主机 MyHost: # delete host MyHost Info: Command completed s

使用VBS获取当前日期的前一天 并修正输出格式_vbs

获取当前日期方法一: 复制代码 代码如下: Currentdate1=date() msgbox Currentdate1 获取当前日期方法二: 复制代码 代码如下: Currentdate2=year(Now)&"-"&Month(Now)&"-"&day(Now) msgbox Currentdate2 补充一个:如果想获取的日期前面是1位数的前面补0的写法,例如 2016年5月16,如果目录是2016516不如20160516更

使用 Iisext.vbs 删除 Web 服务扩展文件的方法_vbs

应用到: Windows Server 2003, Windows Server 2003 R2, Windows Server 2003 with SP1 可使用命令行脚本 iisext.vbs(存储在 systemroot\system32 中)从 WebSvcExtRestrictionList Metabase Property中删除单个文件.该命令可在运行带有 IIS 6.0 的 Windows Server 2003 家族的成员的本地计算机或远程计算机上执行.Web 服务扩展文件可以