Windows在后台不停地为我们工作,同时也不断地给我们带来一些临时文件。虽然这些临时文件在Windows或者应用程序正常退出时会被自动删除,可是大家都知道Windows和位居其下的应用程序是如此的不稳定,不正常中止的现象时有发生,这样,临时文件就随着时间的推移而逐渐堆积起来。它们不但占据了我们有限的空间,在很多时候也给我们的系统带来了更多不稳定因素,于是定期删除这些临时文件便成了我等Windows用户的家常便饭。
   常规的临时文件删除方法
   要删除这些临时文件,我们平时是这样做的:
   1.按下Win+F打开搜索窗口,查找以“*.tmp”(不包括引号)为后缀的文件,当然了我们的查找是要包含“搜索子文件夹”的。
   2.在搜索出来的结果窗口中,按下Ctrl+A选择所有文件,然后删除。
   不过事情并不像我们所想象的那样简单,在很多时候,你可能会遇到这样的烦恼——Windows遇到了不能删除的临时文件(如果一个临时文件正在被使用当然是不能删除的),而这种文件在我们打开多个应用程序的时候会更多。
   WSH的文件处理对象
   不过有了Windows Script语言,这些烦恼应该置于脑后了,WSH强大的文件处理引擎包含了FileSystemObject、Folder、File和Drive四个对象,巧妙运用这四个对象的属性和方法,可以让我们的文件操作更加得心应手,它们的方法和属性很多,我这里也就不再一一列举。有兴趣的朋友可以到替换www.microsoft.com/scripting下Download一个VBScript的文档,保你受用无穷……
  我们通常可以通过一个FileSystemObject得到一个Folder(文件夹)和File(文件对象),在VBScript中可以实现:
   Set FSO = CreateObject("Scripting. FileSystemObject")
   这里我们只所以用Set语句而不是使用一个简单的“=”是因为我们需要得到的FSO是一个对象而不是一个变量,比如下边一段可以让我们在C:盘很目录下建立一个名为TestFile.txt的文本文件,并且在该文本文件中写入一段话:
  
   Set FSO = CreateObject("Scripting. FileSystemObject")
   Set TestFile = FSO.CreateTextFile("c:\TestFile.txt", True)
   TestFile.WriteLine("这仅仅是我为了测试而生成的一个临时文件。")
   TestFile.Close
  
   如果我们需要知道一个已经存在的文件的属性,可以使用FileSystemObject或者Folder对象来得到,比如下边的语句将要显示我们前边生成的文件的各种属性:
  
   Set FSO = CreateObject("Scripting. FileSystemObject")
   AFileSpec = "c:\TestFile.txt"
   Set AFile = FSO.GetFile(AFileSpec)
   Message= AFile.Name & " 在磁盘 " & UCase(AFile.Drive) & "上" & vbCrLf
   Message = Message & "创建于: " & AFile.DateCreated & vbCrLf
   Message = Message & "最后存取时间: " & AFile.DateLastAccessed & vbCrLf
   Message = Message & "最后修改时间: " & AFile.DateLastModified
   MsgBox Message, 0, "文件信息"
  
   现在我们来看看,如何得到一个文件夹中所有的临时文件,说起来很简单:如果你创建了一个FileSystemObject对象,你就可以通过它的GetFolder方法来得到一个特定的文件夹,这样你就有了一个Folder对象,然后通过Folder的Files属性,你可以得到一个文件夹中所有的文件。接下来就更简单了,你逐个比较每个文件的后缀名,来判断是否需要删除,下边的一段代码用来删除一个文件夹中的所有以Tmp为后缀的文件:
  
   Set TheFiles = AFolder.Files
   TheExtension = "tmp"
   For Each AFile In TheFiles
   If UCase(Right(AFile.Name, 3)) = TheExtension Then
   AFile.Delete
   End If
   Next
  
   不过上边的这段代码在删除正在使用的临时文件时还是会报错,对于这个问题我们可以通过使用On Error Resume Next语句来解决;另外还有一个需要解决的问题——上边的程序限定了我们要删除的文件的后缀名是3个字符,这样如果我们需要那些文件后缀是4个的.jpeg、.html文件,还要修改程序才能实现,其实有一个很好的办法可以解决,那就是用FileSystemObject的GetExtensionName属性,那么这段代码应该是这样的:
  
   Sub KillFilesWithExtensionIn (AFolder,TheExtension)
   Dim AFile, TheFiles
   On Error Resume Next
   Set TheFiles = AFolder.Files
   For Each AFile In TheFiles
   If UCase(FSO.GetExtensionName(AFile.Path)) = TheExtension Then
   AFile.Delete
   End If
   Next
   End Sub
  
   现在我们只有一个问题了,那就是搜索一个文件夹的子文件夹。这个问题更容易解决,我们通过Folder的SubFolders属性就可以得到一个文件夹的所有子文件夹,然后一一遍历就可以了,代码如下:
  
   Sub WorkWithSubFolders(ByVal AFolder, ByVal TheExtension)
   Dim MoreFolders, TempFolder
   KillFilesWithExtensionIn AFolder,
   TheExtension
   Set MoreFolders = AFolder.SubFolders
   For Each TempFolder In MoreFolders
   WorkWithSubFolders TempFolder, TheExtension
   Next
   End Sub
   最后的代码实现
   需要说明一下的是,我们这里只删除C:盘所有的临时文件,如果你需要删除其它磁盘的临时文件,将源程序稍加修改就可以实现(你甚至可以一次删除所有磁盘的临时文件),同时由于源代码比较长,想免去录入之苦的朋友可以到替换www.pcdigest.com/magazine/200102/wsh01.zip下载。
   Dim FSO, WSH, TheExtension, TheCount
   Dim TheFolder, Message, YesNo
   Set FSO = CreateObject("Scripting.FileSystemObject")
   Set WSH = CreateObject("WScript.Shell")
   Set TheFolder = FSO.GetFolder("C:\") '起始目录为C:盘根目录
  
   TheExtension = InputBox("请输入想要删除的文件的后缀名(不包括.号),比如:tmp")
   TheExtension = UCase(TheExtension)
   Message = "你想要删除所有"
   Message = Message & "后缀名为 " & vbCrLf
   Message = Message & vbCrLf & TheExtension &vbCrLf & "的文件吗?"
   YesNo = MsgBox(Message, vbYesNo)
   If YesNo = vbYes Then
   Message = "按下回车或者“OK”开始删除 "
   Message = Message & "注意,这可能需要比较长的一段时间。 "
   Message = Message & "而且每处理100个子目录将会显示一条信息。"
  
   Message = Message & "每条信息将保留一秒钟时间"
   MsgBox Message
   WorkWithSubFolders TheFolder, TheExtension
   End If
   MsgBox "文件删除完毕,共处理了 " & TheCount & "个目录,按下“OK”或者回车结束。"
  
   Sub WorkWithSubFolders(ByVal AFolder, ByVal TheExtension)
   Dim MoreFolders, TempFolder
   TheCount = TheCount + 1 'VBScript没有静态变量,
   '所以我们使用了一个全局变量
   If TheCount Mod 100 = 0 Then
   Message = "已经处理了 " & TheCount & "个文件夹。"
   WSH.Popup Message, 1,"文件删除中……" '弹出信息框停留一秒钟
   End If
  
   KillFilesWithExtensionIn AFolder, TheExtension
   Set MoreFolders = AFolder.SubFolders
   For Each TempFolder In MoreFolders
   WorkWithSubFolders TempFolder, TheExtension
   Next
   End Sub
  
   Sub KillFilesWithExtensionIn(AFolder,TheExtension)
   Dim AFile, TheFiles
   On Error Resume Next
   Set TheFiles = AFolder.Files
   For Each AFile In TheFiles
   If UCase(FSO.GetExtensionName(AFile.Path)) = TheExtension Then
   AFile.Delete
   End If
   Next
   End Sub
   终于完成我们了我们预期的目的,虽然看起来很累,可是“不劳无获”,现在还不赶紧去清理一下自己的临时文件……

转载于:https://www.cnblogs.com/starspace/archive/2009/01/05/1369921.html

巧用WINDOWS脚本语言删除临时文件相关推荐

  1. 程序员表白、恶搞代码 VBS 系统内置脚本语言详细教程(新手篇)

    VBS 脚本语言概述 VBS 是一种 Windows 脚本语言,全称是 Microsoft Visual Basic Script Editon(微软公司可视化 BASIC 脚本版). VBS 是系统 ...

  2. 菜鸟也来编程序 Windows脚本一日通

    看点: 你知道吗?为什么现在脚本病毒如此猖獗? 你知道吗?编写一个脚本病毒其实非常简单! 你知道吗?根本不懂编程的你只要稍加操练也能编出不错的软件! Windows脚本就像魔法卷轴般神奇,编写起来也很 ...

  3. VBS带你领略脚本语言的快乐!(入门篇)

    VBS语言基础入门 前言    小弟初来乍到,自诩高中时曾自学过一点VBS脚本语言基础,感觉不错,想把学习到的东西记录下来,和大家分享一下,由于小弟我学艺不精,有误的地方还请多多指教.    入门篇是 ...

  4. 在AWS Lambda上运行脚本语言:PHP、Ruby和Go(外文翻译)

    本文来自Mobingi官方技术专栏,欢迎关注 本文翻译自Scripting Languages for AWS Lambda: Running PHP, Ruby, and Go 备注:Go已经在20 ...

  5. AutoHotkey热键脚本语言文件

    ;=== AutoHotkey热键脚本语言文件 autoHotkey.ini 从此行开始 === The Sart Line Of autoHotkey.ini AutoHotkey ScriptFi ...

  6. 腾讯京东要建“反阿里联盟”?Python 或成 Excel 官方脚本语言;百度华为在一起 | 一周业界事

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 回顾刚刚过去的一周,百度刚与华为达成深度合作,李彦宏与余承东还相互交换了"信物&q ...

  7. 视频教程-Kali Linux渗透测试全程课与脚本语言编程系列课程-渗透测试

    Kali Linux渗透测试全程课与脚本语言编程系列课程 本人有多年的服务器高级运维与开发经验,擅长计算机与服务器攻防及网络攻防技术!对网络安全领域有持续的关注和研究! 林晓炜 ¥899.00 立即订 ...

  8. Groovy – Java的脚本语言

    Groovy – Java的脚本语言 by Mark Volkmann, Partner Object Computing, Inc. (OCI) 翻译:raxy 介绍 Groovy是用Java实现的 ...

  9. JavaScript基础知识与脚本语言总结

    1 Aptana插件安装 1.Aptana插件安装 <1>Aptana是一个非常强大,开源,JavaScript-focused的AJAX开发IDE. <2>它的特点包括: J ...

最新文章

  1. 使用 Eclipse Memory Analyzer 进行堆转储文件分析
  2. mysql 数据库导入导出方法总结
  3. 记帐数据只记部分后如何处理
  4. java inputtools_Java后台开发常用工具类
  5. POJ-1840 Eqs Hash表
  6. Intellij Java注释模板
  7. qpython手机kivy库_QPython Android Kivy,从python脚本启动python脚本
  8. sql server作业_在SQL Server中报告作业失败并发出警报
  9. login RPi via serial port
  10. IP转发的最长前缀匹配
  11. 20世纪50年代到60年代 电子计算机,计算机基础知识习题标准答案
  12. 联想G480黑苹果安装成功
  13. Unity Driven 属性(代码控制属性)使用示例
  14. Linux 系统安装中文语言包
  15. CF 950C.Zebras 模拟,set
  16. VirtualBox中虚拟机的克隆方法
  17. 计算机病毒程序没有文件名 是靠 识别的,计算机理论选择问题和答案.doc
  18. asp.net基础:网页中插入Skype链接标签
  19. 【树莓派】树莓派使用python、E16 GPRS模块向MQTT服务器传输数据
  20. go语言gorm基本使用

热门文章

  1. 学习js权威指南第五站 ---- 数组
  2. Java脚本学习-笔记二
  3. 复习---JS-Array 对象
  4. layout-maxWidth属性用法
  5. 我错了,有个叫 SelectSingleNode 的可以操作 xml
  6. 再读《精通css》03:引入和注释
  7. accesskey 提交
  8. Android JNI入门第四篇——jni头文件分析
  9. 成功要养成的习惯和改掉的习惯
  10. Android 轮播Banner 实现 附代码