嗨,Scripting Guy!

Hey, Scripting Guy!

欢迎来到这个全新的 TechNet 专栏,在这里,Microsoft Scripting Guys 将为您解答与系统管理脚本编写有关的各种常见问题。遇到了系统脚本编写方面的问题?请将电子邮件发送到scripter@microsoft.com. 我们不能保证回答收到的所有问题,但是我们将尽最大的努力。

今天的问题:如何删除 temporary internet files 文件夹中的文件?


如何删除 Temporary Internet Files 文件夹中的文件?

问:

嗨,Scripting Guy!有没有办法使用脚本删除 Temporary Internet Files 文件夹中的所有文件呢?

-- KR

答:

嗨,AK。知道吗,看到您的问题时,Scripting Guys 的一名成员(在此不提供姓名)想到:“嗯,不知道我的 Temporary Internet Files 文件夹中有些什么东西?”检查之后,他发现该文件夹包含 239 G 的垃圾文件;按他的话说,整个 Internet 都保存在他的硬盘上了。

换句话说,看来需要一个脚本来删除 Temporary Internet Files 文件夹中的所有文件。

唯一复杂的因素是尝试确定用户将他或她的 Temporary Internet Files 文件夹放在何处。通常,可以在用户的本地用户配置文件中找到该文件夹,比如:C:\Documents and Settings\kenmyer\Local Settings\Temporary Internet Files。但是,该文件夹并不一定非得在那里;毕竟,Windows 可能并未安装在驱动器 C 上。这表示编写该脚本的关键在于定位 Temporary Internet Files 文件夹;找到之后,删除所有文件就轻而易举了。

那么,如何定位该文件夹呢?由于 Temporary Internet Files 文件夹是一个“特殊的”文件夹(默认情况下,可以在所有 Windows 安装上找到),因此无论您如何处理该文件夹,Windows 仍然可以知道它的下落。因此,可以使用 Shell(外壳)对象——能够定位特殊的文件夹,无论其物理位置如何——来确定 Temporary Internet Files 文件夹的路径,然后使用该路径来绑定该文件夹,并删除在其中找到的所有文件。

警告:无法远程创建 Shell 对象。这表示需要作为登录或注销脚本运行该脚本,或者将其复制到远程计算机上,并使用 WMI Win32_Process 类在远程机器上运行该脚本。如需更多相关信息,可以访问嗨,Scripting Guy! 专栏(使用 Win32_Process 在远程计算机上运行 md 命令)。

让我们看一下这个脚本:

Const TEMPORARY_INTERNET_FILES = &H20&

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(TEMPORARY_INTERNET_FILES)
Set objFolderItem = objFolder.Self
strPath = objFolderItem.Path & "\*.*"

Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile(strPath)

是的,我们知道:听了前面的介绍之后,您可能会觉得事情更复杂了,对吧?起初,我们将 TEMPORARY_INTERNET_FILES 常量设为 &H20&。需要该值来连接到 Temporary Internet Files 文件夹(稍候进行详细介绍)。然后,我们将创建 Shell 对象,并使用 Namespace(命名空间)方法定位该文件夹。出于 Shell 对象特殊的性质,我们之后调用了 Self 方法来实际连接到该文件夹;这一点就是这行代码所做的:

Set objFolderItem = objFolder.Self

这时,我们就可以确定所述的文件夹的实际路径(比如:C:\Documents and Settings\kenmyer\Local Settings\Temporary Internet Files)。如果所要知道就是这些,那么可以使用类似如下的代码行:

Wscript.Echo objFolderItem.Path

然而,我们需要使用 FileSystemObject 来删除该文件夹中的所有文件。为了实现这一点,必须向 FileSystemObject 传递一个类似如下所示的路径(使用标准通配符来表示该文件夹中的所有文件):

C:\Documents and Settings\kenmyer\Local Settings\Temporary Internet Files\*.*

然后使用该代码行构建路径:

strPath = objFolderItem.Path & "\*.*"

正如您所看到的,我们采用 Shell 对象返回的路径,然后添加 \*.*。最终将得到一个命令,告诉 FileSystemObject 删除该文件夹中的所有文件。

那么,这就是在最后两行代码所完成的任务:我们创建了 FileSystemObject 的一个实例,然后使用 DeleteFile 方法删除了所有文件。就是这样,我们清空了 Temporary Internet Files 文件夹。

当然,既然做到这步,您可能也想清空 Internet Cookies 文件夹。以下脚本可以完成这个任务

Const COOKIES = &H21&

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(COOKIES)
Set objFolderItem = objFolder.Self
strPath = objFolderItem.Path & "\*.*"

Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile(strPath)

顺便提一下,我们预感到只要我们一发布这个专栏就会有人开始问我们:“那么,如何连接到 My Pictures(图片收藏)文件夹?”或者“有没有办法连接到 My Recent Documents(我最近的文档)文件夹?”因此,我们预先在脚本中心脚本资源库中增加了 38 个新的脚本。这些脚本将向您展示如何使用 Shell 对象连接到各个可访问的特殊的文件夹。尽情享受吧!


更多信息

欢迎访问嗨,Scripting Guy!- 存档

返回页首返回页首