热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

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

推荐阅读
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了新款奇骏的两个让人上瘾的功能,分别是智能互联系统和BOSE音响。通过对新款奇骏的配置和功能进行评测,探讨了这两个新增功能的使用体验和优势。此外,还介绍了新款奇骏的其他配置和改进,如增加的座椅和驾驶辅助系统,以及内饰的舒适性提升。对于喜欢音响的消费者来说,BOSE音响的升级也是一个亮点。最后,文章提到了BOSE音响的数字还原能力,以及7座版无法配备BOSE音响的原因。 ... [详细]
  • 本文详细介绍了相机防抖的设置方法和使用技巧,包括索尼防抖设置、VR和Stabilizer档位的选择、机身菜单设置等。同时解释了相机防抖的原理,包括电子防抖和光学防抖的区别,以及它们对画质细节的影响。此外,还提到了一些运动相机的防抖方法,如大疆的Osmo Action的Rock Steady技术。通过本文,你将更好地理解相机防抖的重要性和使用技巧,提高拍摄体验。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文详细介绍了华为4GLTE路由器B310的外置天线安装和设置方法。通过连接电源和网线,输入路由器的IP并登陆设置页面,选择手动设置和手动因特网设置,输入ISP提供商的用户名和密码,并设置MTU值。同时,还介绍了无线加密的设置方法。最后,将外网线连在路由器的WAN口即可使用。 ... [详细]
  • 本文讨论了前端工程化的准备工作,主要包括性能优化、安全防护和监控等方面需要注意的事项。通过系统的答案,帮助前端开发者更好地进行工程化的准备工作,提升网站的性能、安全性和监控能力。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 如何修改路由器密码?路由器登录密码和无线密码的修改方法
    本文介绍了修改路由器密码的两种方法:一是修改路由器登录口令,需要进入路由器后台进行操作;二是修改无线连接密码,通过进入路由器后台的无线设置和无线安全设置进行修改。详细步骤包括复位处理、登录路由器后台、选择系统工具、填入用户名和用户密码、保存修改等。 ... [详细]
  • 本文介绍了2019年上半年内蒙古计算机软考考试的报名通知和考试时间。考试报名时间为3月1日至3月23日,考试时间为2019年5月25日。考试分为高级、中级和初级三个级别,涵盖了多个专业资格。报名采取网上报名和网上缴费的方式进行,报考人员可登录内蒙古人事考试信息网进行报名。详细内容请点击查看。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
author-avatar
张-苡_278
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有