分享
 
 
 

巧用WINDOWS脚本语言删除临时文件

王朝system·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

Windows在后台不停地为我们工作,同时也不断地给我们带来一些临时文件。虽然这些临时文件在Windows或者应用程序正常退出时会被自动删除,可是大家都知道Windows和位居其下的应用程序是如此的不稳定,不正常中止的现象时有发生,这样,临时文件就随着时间的推移而逐渐堆积起来。它们不但占据了我们有限的空间,在很多时候也给我们的系统带来了更多不稳定因素,于是定期删除这些临时文件便成了我等Windows用户的家常便饭。

常规的临时文件删除方法

要删除这些临时文件,我们平时是这样做的:

1.按下Win+F打开搜索窗口,查找以“*.tmp”(不包括引号)为后缀的文件,当然了我们的查找是要包含“搜索子文件夹”的。

2.在搜索出来的结果窗口中,按下Ctrl+A选择所有文件,然后删除。

不过事情并不像我们所想象的那样简单,在很多时候,你可能会遇到这样的烦恼――Windows遇到了不能删除的临时文件(如果一个临时文件正在被使用当然是不能删除的),而这种文件在我们打开多个应用程序的时候会更多。

WSH的文件处理对象

不过有了Windows Script语言,这些烦恼应该置于脑后了,WSH强大的文件处理引擎包含了FileSystemObject、Folder、File和Drive四个对象,巧妙运用这四个对象的属性和方法,可以让我们的文件操作更加得心应手,它们的方法和属性很多,我这里也就不再一一列举。有兴趣的朋友可以到http://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:盘所有的临时文件,如果你需要删除其它磁盘的临时文件,将源程序稍加修改就可以实现(你甚至可以一次删除所有磁盘的临时文件),同时由于源代码比较长,想免去录入之苦的朋友可以到http://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

终于完成我们了我们预期的目的,虽然看起来很累,可是“不劳无获”,现在还不赶紧去清理一下自己的临时文件……

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有