VBS 顯示“選擇文件或文件夾”對(duì)話框的代碼
來(lái)源:易賢網(wǎng) 閱讀:1306 次 日期:2016-07-07 14:28:49
溫馨提示:易賢網(wǎng)小編為您整理了“VBS 顯示“選擇文件或文件夾”對(duì)話框的代碼”,方便廣大網(wǎng)友查閱!

VBS 顯示“選擇文件或文件夾”對(duì)話框的代碼,經(jīng)測(cè)試windows xp下才可以使用,win2000,win2003沒(méi)有內(nèi)置這樣的方法。

一、顯示“選擇文件”的對(duì)話框

問(wèn): 嗨,Scripting Guy!有沒(méi)有什么方法可以讓我使用腳本向用戶(hù)顯示一個(gè)對(duì)話框,供用戶(hù)選擇文件使用?

答:您好。|

如果您使用的是 Windows 2000,我們不知道實(shí)現(xiàn)此操作的方法,至少操作系統(tǒng)中沒(méi)有內(nèi)置這樣的方法。

但如果您使用的是 Windows XP,情況就不同了。在 Windows XP 上,您可以使用"UserAccounts.CommonDialog” 對(duì)象向用戶(hù)顯示一個(gè)標(biāo)準(zhǔn)的“文件打開(kāi)”對(duì)話框。

可以用類(lèi)似以下代碼的腳本:

代碼如下:

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

這是一個(gè)小腳本,所以讓我們逐行進(jìn)行解釋吧:

1)我們首先創(chuàng)建一個(gè)對(duì) UserAccounts.CommonDialog 對(duì)象的對(duì)象引用(名為“objDialog”)。

2)接著,我們?cè)O(shè)置對(duì)話框的“篩選”屬性。我們要顯示所有文件,所以我們將篩選設(shè)置成這樣:

objDialog.Filter = "All Files|*.*"

假如我們只想顯示文本文件,那該怎么辦?在這種情況下,我們將使用以下篩選:

objDialog.Filter = "Text Files|*.txt"

您也許能夠看出它是如何運(yùn)行的:我們?yōu)槲募?lèi)型提供說(shuō)明 (Text Files),然后插入一個(gè)豎線分隔符 (|),最后使用標(biāo)準(zhǔn)的通配符來(lái)指示所有 .txt 文件 (*.txt)。

是不是想默認(rèn)顯示 .txt 文件,然后為用戶(hù)提供查看所有文件的選項(xiàng)?那么可以使用以下代碼:

objDialog.Filter = "Text Files|*.txt|All Files|*.*"

試一試,您就明白我們的意思了。

3)然后,我們指定默認(rèn)文件夾。

默認(rèn)情況下,我們希望對(duì)話框顯示位于驅(qū)動(dòng)器 C 的根文件夾中的文件,所以我們這樣設(shè)置“InitialDir”屬性:

objDialog.InitialDir = "C:\"

希望顯示 C:\Windows 文件夾中的文件嗎?那么可以使用以下代碼:

objDialog.InitialDir = "C:\Windows"

不必?fù)?dān)心:這是一個(gè)真正的“文件打開(kāi)”對(duì)話框,所以您可以隨意單擊,并且可以隨時(shí)停下來(lái)。您從 C:\Windows 開(kāi)始并不意味著您只能打開(kāi)該文件夾中的文件。

4)最后,我們使用下面這行代碼顯示對(duì)話框:

intResult = objDialog.ShowOpen

現(xiàn)在,我們只需坐下來(lái),等待用戶(hù)選擇文件并單擊“確定”(或者等待用戶(hù)單擊“取消”)。

如果用戶(hù)單擊“取消”,則變量 intResult 將被設(shè)置為 0。在我們的腳本中,我們檢查 intResult 的值,如果是 0,我們將只需要使用 Wscript.Quit 來(lái)終止此腳本。

但是如果用戶(hù)實(shí)際上選擇了文件并單擊了“確定”,那該怎么辦?在這種情況下,intResult 將被設(shè)置為 -1,“FileDialog”屬性將被設(shè)置為所選文件的路徑名。我們的腳本只回顯路徑名,這意味著我們將得到類(lèi)似以下內(nèi)容的輸出:

C:\WINDOWS\Prairie Wind.bmp

不用說(shuō),您并不局限于只回顯文件路徑。實(shí)際上,您可以使用 WMI、FileSystemObject 或一些其他技術(shù)來(lái)綁定該文件,然后對(duì)其執(zhí)行刪除、復(fù)制、壓縮或檢索文件屬性等操作 — 您對(duì)文件能夠執(zhí)行的操作差不多都可以對(duì)它執(zhí)行。

但無(wú)論如何,您都需要使用腳本。

順便說(shuō)一句,使用此方法,您一次只能選擇一個(gè)文件,而不能按住“Ctrl”鍵選擇多個(gè)文件。有一種方法可以選擇多個(gè)文件,至少在 XP 計(jì)算機(jī)上可以,但是我們只能將此問(wèn)題留到以后的專(zhuān)欄中討論了。

二、顯示“選擇文件夾”對(duì)話框?

問(wèn):嗨,腳本專(zhuān)家!在前面的專(zhuān)欄中,您為我們展示了如何給用戶(hù)顯示對(duì)話框,使他們能夠選擇文件。存在給用戶(hù)顯示一個(gè)對(duì)話框,只讓他們選擇文件夾的辦法嗎?

答:您好。

實(shí)際上,我們有 BrowseForFolder 方法,它是 Windows Shell 對(duì)象的一部分。

讓我給您一個(gè)腳本示例,然后講一下它的工作方式:

代碼如下:

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

首先,我們定義一對(duì)常量:WINDOW_HANDLE 和 OPTIONS。

WINDOW_HANDLE 常量表示需要指定給要顯示的對(duì)話框的數(shù)字 ID;對(duì)于腳本,此值應(yīng)始終為 0。

將 OPTIONS 設(shè)置為 0 表示我們將顯示一個(gè)非常簡(jiǎn)單的對(duì)話框,一個(gè)限制用戶(hù)只從文件夾列表進(jìn)行選擇的對(duì)話框?;蛘撸覀兛梢詫?OPTIONS 設(shè)置成 &H10&。這種情況下,我們的對(duì)話框?qū)ㄎ谋緟^(qū),用戶(hù)可以在此鍵入文件夾路徑。

定義完常量后,我們創(chuàng)建 Shell.Application 對(duì)象的實(shí)例,然后使用以下代碼顯示“瀏覽文件夾”對(duì)話框:

Set objFolder = objShell.BrowseForFolder _

(WINDOW_HANDLE, "Select a folder:", OPTIONS, "C:\")

您可以看到,我們只是調(diào)用 BrowseForFolder 方法,傳遞了四個(gè)參數(shù):

WINDOW_HANDLE,正如我們所說(shuō)明的,是分配給對(duì)話框窗口的數(shù)字 ID。

文本字符串 Select a folder:,將作為顯示在對(duì)話框中的說(shuō)明性消息。

OPTIONS,表示構(gòu)造對(duì)話框所用選項(xiàng)的常量。

C:\,將作為對(duì)話框的根文件夾。對(duì)話框?qū)⒋蜷_(kāi) C:\,但不允許您選擇樹(shù)視圖中較上方的文件位置(例如,您不能選擇“我的電腦”)。如果將根文件夾設(shè)置為 C:\Scripts,則將只允許用戶(hù)選擇文件夾 C:\Scripts 及其所有子文件夾。

該代碼將產(chǎn)生一個(gè)類(lèi)似屏幕上顯示的對(duì)話框。

(您是否有疑問(wèn),是的,您以前曾見(jiàn)過(guò)此對(duì)話框。許多 Windows 應(yīng)用程序使用同樣的方法,同樣的對(duì)話框。)

此時(shí),我們的腳本暫停,等候用戶(hù)選擇文件夾并單擊確定,或者單擊取消。當(dāng)用戶(hù)進(jìn)行了這兩個(gè)操作之一,對(duì)話框?qū)⒈磺宄?,操作將存?chǔ)在對(duì)象引用 objFolder 中。

那么我們?nèi)绾沃烙脩?hù)是否選擇了一個(gè)文件夾并單擊了確定,或者只單擊了取消?以下代碼塊就用來(lái)解決這個(gè)問(wèn)題:

If objFolder Is Nothing Then

Wscript.Quit

End If

該代碼檢查我們的對(duì)象引用 (objFolder) 是否等于一個(gè)真正對(duì)象(這是關(guān)鍵字 Nothing 的用途)。如果 objFolder 等于 Nothing,則意味著用戶(hù)單擊了取消;如果是那樣的話,我們只簡(jiǎn)單用 Wscript.Quit 退出腳本。如果 objFolder 不等于 Nothing,那么 objFolder 一定指向一個(gè)真正的對(duì)象;于是腳本將繼續(xù)運(yùn)行。

由于 Shell 對(duì)象的特點(diǎn),以下兩行代碼是必要的:

Set objFolderItem = objFolder.Self

objPath = objFolderItem.Path

當(dāng)用戶(hù)選擇文件夾并單擊確定,他們將得到 Shell Folder 對(duì)象的實(shí)例。然而,由于某些原因您不能使用 Shell Folder 對(duì)象;如果我們要檢索選定文件夾的路徑,我們得用 FolderItem 對(duì)象來(lái)代替。(為什么是這樣呢?我們不知道。)于是,我們的第一行代碼使用 Self 方法返回一個(gè) FolderItem 對(duì)象,該對(duì)象正與我們的 Folder 對(duì)象相同。第二行代碼將到此 FolderItem 對(duì)象的路徑存儲(chǔ)到變量 objPath 中??瓷先ビ悬c(diǎn)笨拙,但它確實(shí)能夠工作。

最后我們回顯到選定文件夾的路徑,到此工作既已完成。

正如我們說(shuō)明的,示例對(duì)話框使用 C:\ 作為根文件夾,不允許您選擇位于計(jì)算機(jī)其他地方的文件夾。有時(shí)這樣做很好;這樣會(huì)迫使用戶(hù)從一組特定文件夾中進(jìn)行選擇。但有時(shí),想使用戶(hù)能夠選擇文件系統(tǒng)中任意位置的文件夾。這可能嗎?

當(dāng)然可以。我們不詳述這個(gè)修改后的腳本,但該腳本會(huì)將“我的電腦”設(shè)置為根文件夾:

代碼如下:

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

如您所料,所得到的對(duì)話框提供了很多選擇。這正是您所需要的。

更多信息請(qǐng)查看腳本欄目
易賢網(wǎng)手機(jī)網(wǎng)站地址:VBS 顯示“選擇文件或文件夾”對(duì)話框的代碼
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢(xún)回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢(xún)?yōu)闇?zhǔn)!

2025國(guó)考·省考課程試聽(tīng)報(bào)名

  • 報(bào)班類(lèi)型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢(xún) | 簡(jiǎn)要咨詢(xún)須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專(zhuān)用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢(xún)關(guān)注公眾號(hào):hfpxwx
咨詢(xún)QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專(zhuān)用圖標(biāo)