我試圖在 VBA 中獲取檔案夾的檔案串列,但遇到了 DIR 命令的問題,它的作用好像 * 通配符弄亂了我輸入的整個掩碼。
這是我的檔案串列:
- NotAText.inf
- 樣本1.txt
- 樣本2.txt
- 示例3.txt
- 樣本4.txt1
- 樣本5.txta
我嘗試使用的原始掩碼是“ *.txt”,所以我應該得到 3 個檔案。但我得到的是:3 個.txt檔案以及.txt1和.txta檔案。
我已經用其他檔案名和擴展名進行了測驗,如果我只使用問號,它可以正常作業,例如:Mask: " ???????.txt" 回傳 3 個.txt檔案,因為它應該。
有沒有人遇到與這里描述的相同的故障?有沒有人知道導致這種情況的現有問題?試過的系統:Windows 11;Excel 版本:2112 Windows 10;Excel 版本:2102 Windows 98;卓越97
我可能遺漏了一些非常蹩腳的東西,但是如果有人可以提供幫助,我將非常感激。:)
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 個字符的檔案擴展名作為過濾器,它作業正常,它只回傳所需的檔案。我發現在 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 個字符的擴展名過濾器配合使用。
uj5u.com熱心網友回復:
我從來沒有遇到過 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/382503.html
上一篇:如何使用c中的檔案更新用戶資訊
