如何在VBS脚本中显示“选择文件对话框”或“选择目录对话框”
、选择文件[XP操作系统,不能用于Win2000或98],使用“UserAccounts.CommonDialog”对象向用户显示一个标准的“文件打开”对话框
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
这是一个小脚本,所以让我们逐行进行解释吧。我们首先创建一个对 UserAccounts.CommonDialog 对象的对象引用(名为“objDialog”)。接着,我们设置对话框的“筛选”属性。我们要显示所有文件,所以我们将筛选设置成这样:
objDialog.Filter = "All Files|*.*"
假如我们只想显示文本文件,那该怎么办?在这种情况下,我们将使用以下筛选:
objDialog.Filter = "Text Files|*.txt"
您也许能够看出它是如何运行的:我们为文件类型提供说明 (Text Files),然后插入一个竖线分隔符 (|),最后使用标准的通配符来指示所有 .txt 文件 (*.txt)。是不是想默认显示 .txt 文件,然后为用户提供查看所有文件的选项?那么可以使用以下代码:
objDialog.Filter = "Text Files|*.txt|All Files|*.*"
试一试,您就明白我们的意思了。
然后,我们指定默认文件夹。默认情况下,我们希望对话框显示位于驱动器 C 的根文件夹中的文件,所以我们这样设置“InitialDir”属性:
objDialog.InitialDir = "C:\"
希望显示 C:\Windows 文件夹中的文件吗?那么可以使用以下代码:
objDialog.InitialDir = "C:\Windows"
不必担心:这是一个真正的“文件打开”对话框,所以您可以随意单击,并且可以随时停下来。您从 C:\Windows 开始并不意味着您只能打开该文件夹中的文件。
最后,我们使用下面这行代码显示对话框:
intResult = objDialog.ShowOpen
现在,我们只需坐下来,等待用户选择文件并单击“确定”(或者等待用户单击“取消”)。如果用户单击“取消”,则变量 intResult 将被设置为 0。在我们的脚本中,我们检查 intResult 的值,如果是 0,我们将只需要使用 Wscript.Quit 来终止此脚本。
但是如果用户实际上选择了文件并单击了“确定”,那该怎么办?在这种情况下,intResult 将被设置为 -1,“FileDialog”属性将被设置为所选文件的路径名。我们的脚本只回显路径名,这意味着我们将得到类似以下内容的输出:
C:\WINDOWS\Prairie Wind.bmp
不用说,您并不局限于只回显文件路径。实际上,您可以使用 WMI、FileSystemObject 或一些其他技术来绑定该文件,然后对其执行删除、复制、压缩或检索文件属性等操作 — 您对文件能够执行的操作差不多都可以对它执行。
使用此方法,一次只能选择一个文件,而不能按住“Ctrl”键选择多个文件。
2、选择目录, 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 对象的实例,然后使用以下代码显示“浏览文件夹”对话框:
Set objFolder = objShell.BrowseForFolder _
(WINDOW_HANDLE, "Select a folder:", OPTIONS, "C:\")
您可以看到,我们只是调用 BrowseForFolder 方法,传递了四个参数:
WINDOW_HANDLE,正如我们所说明的,是分配给对话框窗口的数字 ID。
文本字符串 Select a folder:,将作为显示在对话框中的说明性消息。
OPTIONS,表示构造对话框所用选项的常量。
C:\,将作为对话框的根文件夹。对话框将打开 C:\,但不允许您选择树视图中较上方的文件位置(例如,您不能选择“我的电脑”)。如果将根文件夹设置为 C:\Scripts,则将只允许用户选择文件夹 C:\Scripts 及其所有子文件夹。
该代码将产生一个类似屏幕上显示的对话框。
(您是否有疑问,是的,您以前曾见过此对话框。许多 Windows 应用程序使用同样的方法,同样的对话框。)
此时,我们的脚本暂停,等候用户选择文件夹并单击确定,或者单击取消。当用户进行了这两个操作之一,对话框将被清除,操作将存储在对象引用 objFolder 中。
那么我们如何知道用户是否选择了一个文件夹并单击了确定,或者只单击了取消?以下代码块就用来解决这个问题:
If objFolder Is Nothing Then
Wscript.Quit
End If
该代码检查我们的对象引用 (objFolder) 是否等于一个真正对象(这是关键字 Nothing 的用途)。如果 objFolder 等于 Nothing,则意味着用户单击了取消;如果是那样的话,我们只简单用 Wscript.Quit 退出脚本。如果 objFolder 不等于 Nothing,那么 objFolder 一定指向一个真正的对象;于是脚本将继续运行。
由于 Shell 对象的特点,以下两行代码是必要的:
Set objFolderItem = objFolder.Self
objPath = objFolderItem.Path
当用户选择文件夹并单击确定,他们将得到 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
如何在VBS脚本中显示“选择文件对话框”或“选择目录对话框”的更多相关文章
- 技术分享:如何在PowerShell脚本中嵌入EXE文件
技术分享:如何在PowerShell脚本中嵌入EXE文件 我在尝试解决一个问题,即在客户端攻击中只使用纯 PowerShell 脚本作为攻击负荷.使用 PowerShell 运行恶意代码具有很多优点, ...
- 转:如何在 LoadRunner 脚本中做关联 (Correlation)
如何在 LoadRunner 脚本中做关联 (Correlation) 当录制脚本时,VuGen会拦截client端(浏览器)与server端(网站服务器)之间的对话,并且通通记录下来,产生脚本.在V ...
- #iPhone6与iPhone6Plus适配#如何在Xcode 6中创建 PCH 文件
本文永久链接http://www.cnblogs.com/ChenYilong/p/4008086.html 新建文件 ⌘+N选择 iOS/Mac -> Other -> PCH Fi ...
- 如何在Sublime text中运行PHP文件
如何在Sublime text中运行PHP文件 2014-06-14 17:17 3709人阅读 评论(1) 收藏 举报 phpSublime Text 一.将PHP安装目录放如环境变量PATH 二. ...
- 如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样)
如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样) python标准库中的subprocess可以解决这个问题. from subprocess ...
- echo 在shell及脚本中显示色彩及闪烁警告效果
在shell脚本编写中,echo用于输出字符串等提示信息,当我们需要格外显示色彩及闪烁效果如下: 一.在执行shell中显示色彩: 语法格式: echo -e "\033[颜色1:颜色2m ...
- 自学Linux Shell14.2-在脚本中使用其他文件描述符
点击返回 自学Linux命令行与Shell脚本之路 14.2-在脚本中使用其他文件描述符 在脚本中重定向输入和输出,并布局限于以上讲的3个默认的文件描述符,shell最多可以有9个打开的文件描述符.这 ...
- 如何在浏览器网页中显示word文件内容
如何在浏览器网页中显示word文件内容 把word文件读到byte[]中,再Response.OutputStream.Write(bytes)到客户端去 Page_Load事件中写: //FileS ...
- 2.Jmeter 如何在jsr223 脚本中停止测试任务
Jmeter 如何在jsr223 脚本中停止测试任务 在可以直接引用ctx的变量的processor中可以执行如下脚本即可. (例如jsr223 postprocessor中) ctx.getEngi ...
随机推荐
- Java的设计模式----strategy(策略模式)
设计模式: 一个程序员对设计模式的理解: “不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开 ...
- 用Karma和Jasmine测试Angular应用
TEST: Before you've written any of the code, you know how you want it to behave. You have a specific ...
- SQL Server 2008新特性——更改跟踪
在大型的数据库应用中,经常会遇到部分数据的脱机和多个数据库的合并问题.比如现在有一个全省范围使用的应用程序,每个市都部署了单独的相同的应用程序服务器和数据库服务器,每个月需要将全省所有市的数据全部汇总 ...
- spring+ibatis问题1—— 程序报错:java.sql.SQLException: Io 异常: Connection reset by peer, socket write error; ”或“java.sql.SQLException 关闭的连接”异常
转自:http://blog.sina.com.cn/s/blog_1549fb0710102whz2.html spring+ibatis程序测试时报错:java.sql.SQLException: ...
- SQLite学习网址
http://www.runoob.com/sqlite/sqlite-data-types.html
- 查询被收录页面中的死链接 By SEO
朋友说他的站挂了,想知道被收录的页面有多少是死链,于是我就想了一下流程,从Site获得收录数量当然是不精准的,不过也没有更好的地了,真实的收录只有搜索引擎数据库里面才有... 查询被收录页面的状态码, ...
- JAVA监听
http://www.cnblogs.com/xdp-gacl/p/3961929.html 不要按汉字的字面意思理解这东西,其实它就是把某个操作绑到了某个按纽上,当你按那个按纽的时候,它所绑定的操作 ...
- Node.js:url
在node运行环境中输入url: > url url { parse: [Function: urlParse], resolve: [Function: urlResolve], resolv ...
- jQuery复习:第二章&第三章
第二章 一.选择器 1.层次选择器 $(“ancestor descendant”)选取ancestor元素里的所有后代元素 $(“parent > child”)选取parent元素下的chi ...
- TortoiseGit - 分支管理 -增加分支
1.本地当前在master分支,右击选择Create Branch... 2.填写Branch的名称 3.右击选择Push,在Ref-Local,选择刚才新建的Branch名称 4.点击OK后,在弹出 ...