vba打开指定路径文件夹多个文件夹,VBS通过shell.Application获取的Windows.LocationURL路径,如何判断哪个是最后工作路径?

1、用FSO的SpecialFolder常数 FSO的SpecialFolder常数依赖的函数为GetSpecialFolder(SpecialFolder),很遗憾的是,SpecialFolder常数只有3个,0-2,0对应WindowsFolder,就是你的Windows文件夹,如果你的系统装在C盘的话,那么返回的就是"C:\Windows"这个路径字符串。1对应SystemFolder,GetSpecialFolder(1)返回"C:\Windows\system32"。2代表临时文件夹,就不要我多说了吧? 下面给出取临时文件夹路径字符串的实例: Dimfso Setfso=CreateObject("Scripting.FileSystemObject")//绑定FSO对象 Dimtempfolder ConstTemporaryFolder=2 Settempfolder=fso.GetSpecialFolder(TemporaryFolder) Wscript.Echotempfolder 你把上面的代码保存为一个vbs文件打开试试,弹出了你的临时文件夹所在的路径。这个字符串存放在变量tempfolder里面,明白? 2、用WshShell的取系统环境变量 Wscript.Shell对象提供了Environment这个一个东东。返回WshEnvironment的对象合集。先看一个实例: SetWshShell=Wscript.CreateObject("Wscript.Shell")//绑定WSH对象 SetWshSysEnv=WshShell.Environment("Process") Wscript.EchoWshSysEnv.Item("SYSTEMROOT") 将以上代码保存为vbs文件,运行,是不是弹出了你的系统路径?"C:\windows"对吧? 有人会问,如果想取其他的路径呢?取决于你的系统环境变量了,系统环境变量一般又下面几个: 名称说明 NUMBER_OF_PROCESSORS计算机上运行的处理器数目。 PROCESSOR_ARCHITECTURE用户工作站使用的处理器类型。 PROCESSOR_IDENTIFIER用户工作站的处理器ID。 PROCESSOR_LEVEL用户工作站的处理器级。 PROCESSOR_REVISION用户工作站的处理器版本。 OS用户工作站所用的操作系统。 COMSPEC用于运行“命令提示”窗口的命令(通常为cmd.exe)。 HOMEDRIVE本地主驱动器(通常为C驱动器)。 HOMEPATH用户的默认路径(在WindowsNT上通常为\users\default)。 PATH路径环境变量。 PATHEXT可执行文件的扩展名(通常为.com、.exe、.bat或.cmd)。 PROMPT命令提示符(通常为$P$G)。 SYSTEMDRIVE系统所在的本地驱动器(例如,c:\)。 SYSTEMROOT系统目录(例如,c:\winnt)。和WINDIR相同。 WINDIR系统目录(例如c:\winnt)。和SYSTEMROOT相同。 TEMP存储临时文件的目录(例如,c:\temp)。用户可更改。 TMP存储临时文件的目录(例如,c:\temp)。用户可更改。 你可以用上面的变量自己替换WshSysEnv.Item("SYSTEMROOT")里面的SYSTEMROOT。 3、用WshShell的SpecialFolders属性 SpecialFolders属性提供WshSpecialFolders对象以便访问Windows的shell文件夹,例如桌面文件夹、开始菜单文件夹和个人文档文件夹。 下面biweilun给出实例: SetWshShell=Wscript.CreateObject("Wscript.Shell") Wscript.Echo"Yourdesktopis"&WshShell.SpecialFolders("Desktop") 这是一个弹出你的桌面文件夹所在的路径的字符串,当然你也可以选择用一个字符串来保存它。那么,SpecialFolders属性一共有那些呢? AllUsersDesktop AllUsersStartMenu AllUsersPrograms AllUsersStartup Desktop Favorites Fonts MyDocuments NetHood PrintHood Programs Recent SendTo StartMenu Startup Templates 以上的文件夹大家看就能猜到这是什么路径了吧?如果你认为我写得不全,你可以自己使用下面的脚本代码看: SetWshShell=Wscript.CreateObject("Wscript.Shell") ''htp://hi.baidu.com/biweilun ''Listallspecialfolders ForEachstrFolderInWshShell.SpecialFolders Wscript.EchostrFolder Next 你会发现所有可用的SpecialFolders都一一弹出来显示了。
、选择文件[XP操作系统,不能用于Win2000或98],使用“UserAccounts.CommonDialog”对象向用户显示一个标准的“文件打开”对话框Set objDialog = CreateObject("UserAccounts.CommonDialog")objDialog.Filter = "All Files|*.*"objDialog.InitialDir = "C:\"intResult = objDialog.ShowOpenIf intResult = 0 ThenWscript.QuitElse Wscript.Echo objDialog.FileNameEnd 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 = 0Const OPTIONS = 0Set objShell = CreateObject("Shell.Application")Set objFolder = objShell.BrowseForFolder _(WINDOW_HANDLE, "Select a folder:", OPTIONS, "C:\")If objFolder Is Nothing ThenWscript.QuitEnd IfSet objFolderItem = objFolder.SelfobjPath = objFolderItem.PathWscript.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 ThenWscript.QuitEnd If该代码检查我们的对象引用 (objFolder) 是否等于一个真正对象(这是关键字 Nothing 的用途)。如果 objFolder 等于 Nothing,则意味着用户单击了取消;如果是那样的话,我们只简单用 Wscript.Quit 退出脚本。如果 objFolder 不等于 Nothing,那么 objFolder 一定指向一个真正的对象;于是脚本将继续运行。由于 Shell 对象的特点,以下两行代码是必要的:Set objFolderItem = objFolder.SelfobjPath = objFolderItem.Path当用户选择文件夹并单击确定,他们将得到 Shell Folder 对象的实例。然而,由于某些原因您不能使用 Shell Folder 对象;如果我们要检索选定文件夹的路径,我们得用 FolderItem 对象来代替。(为什么是这样呢?我们不知道。)于是,我们的第一行代码使用 Self 方法返回一个 FolderItem 对象,该对象正与我们的 Folder 对象相同。第二行代码将到此 FolderItem 对象的路径存储到变量 objPath 中。看上去有点笨拙,但它确实能够工作。最后我们回显到选定文件夹的路径,到此工作既已完成。正如我们说明的,示例对话框使用 C:\ 作为根文件夹,不允许您选择位于计算机其他地方的文件夹。有时这样做很好;这样会迫使用户从一组特定文件夹中进行选择。但有时,想使用户能够选择文件系统中任意位置的文件夹。这可能吗?当然可以。我们不详述这个修改后的脚本,但该脚本会将“我的电脑”设置为根文件夹:Const MY_COMPUTER = &H11&Const WINDOW_HANDLE = 0Const OPTIONS = 0Set objShell = CreateObject("Shell.Application")Set objFolder = objShell.Namespace(MY_COMPUTER)Set objFolderItem = objFolder.SelfstrPath = objFolderItem.PathSet objShell = CreateObject("Shell.Application")Set objFolder = objShell.BrowseForFolder _(WINDOW_HANDLE, "Select a folder:", OPTIONS, strPath)If objFolder Is Nothing ThenWscript.QuitEnd IfSet objFolderItem = objFolder.SelfobjPath = objFolderItem.PathWscript.Echo objPath

我要回帖

更多关于 vba打开指定路径文件夹 的文章