VBS 显示“选择文件或文件夹”对话框的代码 |
本文标签:VBS,选择文件,文件夹 一、显示“选择文件”的对话框 答:您好 。| 可以用类似以下代码的脚本: 复制代码 代码如下: Set objDialog = CreateObject("UserAccounts.CommonDialog") objDialog.Filter = "All Files|*.*" objDialog.InitialDir = "C:\" intResult = objDialog.ShowOpen If intResult = 0 Then Wscript.Quit Else Wscript.Echo objDialog.FileName End If 这是一个小脚本,所以让我们逐行进行解释吧: 1)我们首先创建一个对 UserAccounts.CommonDialog 对象的对象引用(名为“objDialog”) 。 2)接着,我们设置对话框的“筛选”属性 。我们要显示所有文件,所以我们将筛选设置成这样: 假如我们只想显示文本文件,那该怎么办?在这种情况下,我们将使用以下筛选: 您也许能够看出它是如何运行的:我们为文件类型提供说明 (Text Files),然后插入一个竖线分隔符 (|),最后使用标准的通配符来指示所有 .txt 文件 (*.txt) 。 试一试,您就明白我们的意思了 。 3)然后,我们指定默认文件夹 。 希望显示 C:\Windows 文件夹中的文件吗?那么可以使用以下代码: 不必担心:这是一个真正的“文件打开”对话框,所以您可以随意单击,并且可以随时停下来 。您从 C:\Windows 开始并不意味着您只能打开该文件夹中的文件 。 4)最后,我们使用下面这行代码显示对话框: intResult = objDialog.ShowOpen 现在,我们只需坐下来,等待用户选择文件并单击“确定”(或者等待用户单击“取消”) 。 C:\WINDOWS\Prairie Wind.bmp 不用说,您并不局限于只回显文件路径 。实际上,您可以使用 WMI、FileSystemObject 或一些其他技术来绑定该文件,然后对其执行删除、复制、压缩或检索文件属性等操作 — 您对文件能够执行的操作差不多都可以对它执行 。 但无论如何,您都需要使用脚本 。 顺便说一句,使用此方法,您一次只能选择一个文件,而不能按住“Ctrl”键选择多个文件 。有一种方法可以选择多个文件,至少在 XP 计算机上可以,但是我们只能将此问题留到以后的专栏中讨论了 。
二、显示“选择文件夹”对话框? 答:您好 。 实际上,我们有 BrowseForFolder 方法,它是 Windows Shell 对象的一部分 。
复制代码 代码如下: Const WINDOW_HANDLE = 0 Const OPTIONS = 0 Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.BrowseForFolder _ (WINDOW_HANDLE, "Select a folder:", OPTIONS, "C:\") If objFolder Is Nothing Then Wscript.Quit End If Set objFolderItem = objFolder.Self objPath = objFolderItem.Path Wscript.Echo objPath 首先,我们定义一对常量:WINDOW_HANDLE 和 OPTIONS 。 WINDOW_HANDLE 常量表示需要指定给要显示的对话框的数字 ID;对于脚本,此值应始终为 0 。 将 OPTIONS 设置为 0 表示我们将显示一个非常简单的对话框,一个限制用户只从文件夹列表进行选择的对话框 。或者,我们可以将 OPTIONS 设置成 &H10& 。这种情况下,我们的对话框将包括文本区,用户可以在此键入文件夹路径 。 定义完常量后,我们创建 Shell.Application 对象的实例,然后使用以下代码显示“浏览文件夹”对话框: 您可以看到,我们只是调用 BrowseForFolder 方法,传递了四个参数: 该代码将产生一个类似屏幕上显示的对话框 。 此时,我们的脚本暂停,等候用户选择文件夹并单击确定,或者单击取消 。当用户进行了这两个操作之一,对话框将被清除,操作将存储在对象引用 objFolder 中 。 那么我们如何知道用户是否选择了一个文件夹并单击了确定,或者只单击了取消?以下代码块就用来解决这个问题: 该代码检查我们的对象引用 (objFolder) 是否等于一个真正对象(这是关键字 Nothing 的用途) 。如果 objFolder 等于 Nothing,则意味着用户单击了取消;如果是那样的话,我们只简单用 Wscript.Quit 退出脚本 。如果 objFolder 不等于 Nothing,那么 objFolder 一定指向一个真正的对象;于是脚本将继续运行 。 由于 Shell 对象的特点,以下两行代码是必要的: 当用户选择文件夹并单击确定,他们将得到 Shell Folder 对象的实例 。然而,由于某些原因您不能使用 Shell Folder 对象;如果我们要检索选定文件夹的路径,我们得用 FolderItem 对象来代替 。(为什么是这样呢?我们不知道 。)于是,我们的第一行代码使用 Self 方法返回一个 FolderItem 对象,该对象正与我们的 Folder 对象相同 。第二行代码将到此 FolderItem 对象的路径存储到变量 objPath 中 。看上去有点笨拙,但它确实能够工作 。 最后我们回显到选定文件夹的路径,到此工作既已完成 。 正如我们说明的,示例对话框使用 C:\ 作为根文件夹,不允许您选择位于计算机其他地方的文件夹 。有时这样做很好;这样会迫使用户从一组特定文件夹中进行选择 。但有时,想使用户能够选择文件系统中任意位置的文件夹 。这可能吗? 当然可以 。我们不详述这个修改后的脚本,但该脚本会将“我的电脑”设置为根文件夹: 复制代码 代码如下: Const MY_COMPUTER = &H11& Const WINDOW_HANDLE = 0 Const OPTIONS = 0 Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.Namespace(MY_COMPUTER) Set objFolderItem = objFolder.Self strPath = objFolderItem.Path Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.BrowseForFolder _ (WINDOW_HANDLE, "Select a folder:", OPTIONS, strPath) If objFolder Is Nothing Then Wscript.Quit End If Set objFolderItem = objFolder.Self objPath = objFolderItem.Path Wscript.Echo objPath 如您所料,所得到的对话框提供了很多选择 。这正是您所需要的 。 |