使用 Dir 获取文件夹的文件列表
Get the file list of a folder with Dir
我正在尝试获取 VBA
中文件夹的文件列表
DIR 命令的作用就好像 * 通配符打乱了我输入的整个掩码。
这是我的文件列表:
- NotAText.inf
- Sample1.txt
- Sample2.txt
- Sample3.txt
- Sample4.txt1
- Sample5.txta
我试过的原始掩码是“*.txt
”
我应该 得到 3 个文件。
相反,我得到:3 .txt 文件和 .txt1 和 .txta 个文件。
我测试了其他文件名和扩展名,如果我只使用问号,它工作正常,例如:
掩码:“???????.txt
”returns 3 .txt 个文件。
尝试过的系统:
Windows11; Excel版本:2112
Windows10; Excel版本:2102
Windows98; Excel97
Sub test()
Dim i As Integer
Dim s As String
i = 1
s = Dir("*.txt")
Do While (s <> "")
Cells(i, 1) = s
s = Dir
i = i + 1
Loop
End Sub
新发现:如果我使用超过 3 个字符的文件扩展名作为过滤器,它工作正常,它只 returns 所需的文件。我在 Windows 98 的命令提示符下发现 Windows 将 3 个字符的文件扩展名过滤器视为“基础”,并将类似文件(以该过滤器开头)也视为“TXT”,我想这是现代 Windows 版本也是如此,这就是故障存在的原因。我的猜测是,当使用 3 个字符的扩展过滤器时,它会使用 8.3 文件名格式进行搜索,而当使用更长的文件名时,它会使用正确的长文件名进行搜索。我刚刚发现了一个古老的 Windows 错误吗???
SAMPLE1 TXT 0 21.12.14 12.04 Sample1.txt
SAMPLE2 TXT 0 21.12.14 12.04 Sample2.txt
SAMPLE3 TXT 0 21.12.14 12.04 Sample3.txt
SAMPLE~1 TXT 0 21.12.14 12.04 Sample4.txt1
SAMPLE~2 TXT 0 21.12.14 12.04 Sample5.txta
有趣的事实:在 PowerShell 下,该命令使用 3 个字符的扩展过滤器。
我从来没有遇到过 Dir 的问题,但为了您的需要,请尝试这样的事情 -
Dim i As Long
Dim s As String, sPath As String, sFilter As String
i = 1
sPath = CurDir & "\"
sFilter = "*.txt"
s = Dir(sPath, 15)
Do While Len(s)
If LCase(s) Like sFilter Then
Cells(i, 1) = s
i = i + 1
End If
s = Dir
Loop
End Sub
我正在尝试获取 VBA
中文件夹的文件列表DIR 命令的作用就好像 * 通配符打乱了我输入的整个掩码。
这是我的文件列表:
- NotAText.inf
- Sample1.txt
- Sample2.txt
- Sample3.txt
- Sample4.txt1
- Sample5.txta
我试过的原始掩码是“*.txt
”
我应该 得到 3 个文件。
相反,我得到:3 .txt 文件和 .txt1 和 .txta 个文件。
我测试了其他文件名和扩展名,如果我只使用问号,它工作正常,例如:
掩码:“???????.txt
”returns 3 .txt 个文件。
尝试过的系统:
Windows11; Excel版本:2112
Windows10; Excel版本:2102
Windows98; Excel97
Sub test()
Dim i As Integer
Dim s As String
i = 1
s = Dir("*.txt")
Do While (s <> "")
Cells(i, 1) = s
s = Dir
i = i + 1
Loop
End Sub
新发现:如果我使用超过 3 个字符的文件扩展名作为过滤器,它工作正常,它只 returns 所需的文件。我在 Windows 98 的命令提示符下发现 Windows 将 3 个字符的文件扩展名过滤器视为“基础”,并将类似文件(以该过滤器开头)也视为“TXT”,我想这是现代 Windows 版本也是如此,这就是故障存在的原因。我的猜测是,当使用 3 个字符的扩展过滤器时,它会使用 8.3 文件名格式进行搜索,而当使用更长的文件名时,它会使用正确的长文件名进行搜索。我刚刚发现了一个古老的 Windows 错误吗???
SAMPLE1 TXT 0 21.12.14 12.04 Sample1.txt
SAMPLE2 TXT 0 21.12.14 12.04 Sample2.txt
SAMPLE3 TXT 0 21.12.14 12.04 Sample3.txt
SAMPLE~1 TXT 0 21.12.14 12.04 Sample4.txt1
SAMPLE~2 TXT 0 21.12.14 12.04 Sample5.txta
有趣的事实:在 PowerShell 下,该命令使用 3 个字符的扩展过滤器。
我从来没有遇到过 Dir 的问题,但为了您的需要,请尝试这样的事情 -
Dim i As Long
Dim s As String, sPath As String, sFilter As String
i = 1
sPath = CurDir & "\"
sFilter = "*.txt"
s = Dir(sPath, 15)
Do While Len(s)
If LCase(s) Like sFilter Then
Cells(i, 1) = s
i = i + 1
End If
s = Dir
Loop
End Sub