巧用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脚本语言删除临时文件相关推荐
- 程序员表白、恶搞代码 VBS 系统内置脚本语言详细教程(新手篇)
VBS 脚本语言概述 VBS 是一种 Windows 脚本语言,全称是 Microsoft Visual Basic Script Editon(微软公司可视化 BASIC 脚本版). VBS 是系统 ...
- 菜鸟也来编程序 Windows脚本一日通
看点: 你知道吗?为什么现在脚本病毒如此猖獗? 你知道吗?编写一个脚本病毒其实非常简单! 你知道吗?根本不懂编程的你只要稍加操练也能编出不错的软件! Windows脚本就像魔法卷轴般神奇,编写起来也很 ...
- VBS带你领略脚本语言的快乐!(入门篇)
VBS语言基础入门 前言 小弟初来乍到,自诩高中时曾自学过一点VBS脚本语言基础,感觉不错,想把学习到的东西记录下来,和大家分享一下,由于小弟我学艺不精,有误的地方还请多多指教. 入门篇是 ...
- 在AWS Lambda上运行脚本语言:PHP、Ruby和Go(外文翻译)
本文来自Mobingi官方技术专栏,欢迎关注 本文翻译自Scripting Languages for AWS Lambda: Running PHP, Ruby, and Go 备注:Go已经在20 ...
- AutoHotkey热键脚本语言文件
;=== AutoHotkey热键脚本语言文件 autoHotkey.ini 从此行开始 === The Sart Line Of autoHotkey.ini AutoHotkey ScriptFi ...
- 腾讯京东要建“反阿里联盟”?Python 或成 Excel 官方脚本语言;百度华为在一起 | 一周业界事
点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 回顾刚刚过去的一周,百度刚与华为达成深度合作,李彦宏与余承东还相互交换了"信物&q ...
- 视频教程-Kali Linux渗透测试全程课与脚本语言编程系列课程-渗透测试
Kali Linux渗透测试全程课与脚本语言编程系列课程 本人有多年的服务器高级运维与开发经验,擅长计算机与服务器攻防及网络攻防技术!对网络安全领域有持续的关注和研究! 林晓炜 ¥899.00 立即订 ...
- Groovy – Java的脚本语言
Groovy – Java的脚本语言 by Mark Volkmann, Partner Object Computing, Inc. (OCI) 翻译:raxy 介绍 Groovy是用Java实现的 ...
- JavaScript基础知识与脚本语言总结
1 Aptana插件安装 1.Aptana插件安装 <1>Aptana是一个非常强大,开源,JavaScript-focused的AJAX开发IDE. <2>它的特点包括: J ...
最新文章
- 使用 Eclipse Memory Analyzer 进行堆转储文件分析
- mysql 数据库导入导出方法总结
- 记帐数据只记部分后如何处理
- java inputtools_Java后台开发常用工具类
- POJ-1840 Eqs Hash表
- Intellij Java注释模板
- qpython手机kivy库_QPython Android Kivy,从python脚本启动python脚本
- sql server作业_在SQL Server中报告作业失败并发出警报
- login RPi via serial port
- IP转发的最长前缀匹配
- 20世纪50年代到60年代 电子计算机,计算机基础知识习题标准答案
- 联想G480黑苹果安装成功
- Unity Driven 属性(代码控制属性)使用示例
- Linux 系统安装中文语言包
- CF 950C.Zebras 模拟,set
- VirtualBox中虚拟机的克隆方法
- 计算机病毒程序没有文件名 是靠 识别的,计算机理论选择问题和答案.doc
- asp.net基础:网页中插入Skype链接标签
- 【树莓派】树莓派使用python、E16 GPRS模块向MQTT服务器传输数据
- go语言gorm基本使用