如何在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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM