Dir 函數

套用到
Microsoft 365 Access Access 2024 Access 2021 Access 2019 Access 2016

注意

若 Microsoft Jet Expression Service 以沙盒模式執行,則本主題所述的函式、方法、物件或屬性將被禁用,避免評估潛在不安全的表達式。 想了解更多沙盒模式的資訊,請在說明中搜尋「sandbox mode」。

回傳一個字 ,代表與特定模式或檔案屬性相符的檔案、目錄或資料夾名稱,或磁碟的磁碟區標籤。

語法

Dir[ (路徑名稱 [, 屬性] ) ]

Dir 函數語法包含以下參數:

引數 描述
路徑名稱 可省略。 指定檔名的字串表達式——可包含目錄或資料夾,以及磁碟機。 若找不到 路徑名稱 ,則回傳一個長度為零的字串 (“”“) 。
屬性 可省略。 常數或數值表達式,其和指定檔案屬性。 若省略,則回傳路徑 名稱 相符但無屬性的檔案。

    

設定

屬性參數設定如下:

恆定 描述
vb正常 0 (預設) 指定無屬性的檔案。
vbReadOnly 1 除了沒有屬性的檔案外,還指定唯讀檔案。
vb隱藏 2 除了沒有屬性的檔案外,還指定隱藏檔案。
VbSystem 4 除了沒有屬性的檔案外,還指定系統檔案。 Macintosh 上無法提供。
vbVolume 8 指定體積標籤;若指定其他屬性,則忽略 vbVolume 。 Macintosh 上無法提供。
vbDirectory 16 除了沒有屬性的檔案外,還指定目錄或資料夾。
vb別名 64 指定的檔案名稱是別名。 僅在 Macintosh 上提供。

    

注意

這些常數由 Visual Basic for Applications (VBA) 指定,可以在程式碼中任意使用,取代實際值。

註解

在 Microsoft Windows 中, Dir 支援使用多字元 () * 及單字元 () 萬用字元來指定多個檔案。 在 Macintosh 上,這些字元被視為有效的檔名字元,不能用作通配字碼來指定多個檔案。

由於 Macintosh 不支援萬用卡,請使用檔案類型來識別檔案群組。 你可以用 MacID 函式來指定檔案類型,而不是直接用檔名。 例如,以下陳述句會回傳當前資料夾中第一個 TEXT 檔案的名稱:

Dir("SomePath", MacID("TEXT"))

要遍歷資料夾中的所有檔案,請指定一個空字串:

Dir("")

如果你在 Windows 裡用 MacID 功能搭配 Dir 出現錯誤。

任何屬性值大於 256 的屬性都被視為 MacID 值。

第一次呼叫 Dir 函式時必須指定路徑名稱,否則會發生錯誤。 如果你也指定檔案屬性,必須包含 路徑名稱

Dir 會回傳第一個與 路徑名稱相符的檔名。 若要取得任何與 路徑名稱相符的額外檔案名稱,請再次呼叫 Dir ,且不包含參數。 當沒有其他檔案名稱相符時, Dir 會回傳一個零長度的字串 (“”) 。 一旦回傳一個零長度的字串,你必須在後續呼叫中指定 路徑名稱 ,否則就會發生錯誤。 你可以在不取得所有與目前路徑名稱相符的檔案名的情況下,切換到新的路徑名稱。 不過,你無法遞迴呼叫 Dir 函式。 使用 vbDirectory 屬性呼叫 Dir 並不會持續回傳子目錄。

提示 由於檔案名稱的取得順序沒有特定順序,你可能想先將回傳的檔案名稱存放在陣列中,然後再對陣列進行排序。

範例

注意

下列範例示範如何在 Visual Basic for Applications (VBA) 模組中使用此函數。 如需使用 VBA 的詳細資訊,請在 [搜尋] 旁的下拉式清單中選取 [開發人員參考],並在 [搜尋] 方塊中輸入一個或多個字詞。

此範例使用 Dir 函式來檢查某些檔案與目錄是否存在。 在 Macintosh 上,「HD:」是預設的磁碟名稱,路徑名稱的部分以冒號分隔,而非反斜線。 此外,Windows 的萬用字元在 Macintosh 上被視為有效的檔名字元。 不過,你可以用 MacID 功能來指定檔案群組。

Dim MyFile, MyPath, MyName
' Returns "WIN.INI" (on Microsoft Windows) if it exists.
MyFile = Dir("C:\WINDOWS\WIN.INI")    
' Returns filename with specified extension. If more than one *.ini
' file exists, the first file found is returned.
MyFile = Dir("C:\WINDOWS\*.INI")
' Call Dir again without arguments to return the next *.INI file in the 
' same directory.
MyFile = Dir
' Return first *.TXT file with a set hidden attribute.
MyFile = Dir("*.TXT", vbHidden)
' Display the names in C:\ that represent directories.
MyPath = "c:\"    ' Set the path.
MyName = Dir(MyPath, vbDirectory)    ' Retrieve the first entry.
Do While MyName <> ""    ' Start the loop.
    ' Ignore the current directory and the encompassing directory.
    If MyName <> "." And MyName <> ".." Then
        ' Use bitwise comparison to make sure MyName is a directory.
        If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
            Debug.Print MyName    ' Display entry only if it
        End If    ' it represents a directory.
    End If
    MyName = Dir    ' Get next entry.
Loop