伊莉討論區

標題: 檔名有 VBA 無法辨別的字元 , 如何查出檔案大小 ? [打印本頁]

作者: Marry17Henry    時間: 2017-8-9 07:53 PM     標題: 檔名有 VBA 無法辨別的字元 , 如何查出檔案大小 ?

本帖最後由 darkjack 於 2017-8-11 09:03 PM 編輯

又遇到困難了 , 要列出某資料夾內檔案名稱 , 可以使用下列方式 :
  1. File_Name = Dir("D:\Movie\*.mp4")
  2. While File_Name <> ""
  3.          ...
  4.          ...
  5.          File_Name = Dir()
  6. Wend
複製代碼

如果要查出這些檔案大小 , 可以用 FileLen(File_Name) 指令 ,
但如果遇到檔名有 VBA 無法辨別的字元 , 例如 MMND-130 羽咲美晴.mp4
VBA 跑出的結果會變成 File_Name ="MMND-130 羽?美晴.mp4"
這還可以忍受 , 但如果要查出檔案大小 , 會因檔名不正確而產生程式錯誤 ,
該怎麼查出檔案大小呢 ?



作者: Marry17Henry    時間: 2017-8-11 07:25 PM

本帖最後由 darkjack 於 2017-8-11 09:04 PM 編輯

想起 2,30 年前 DOS 年代的 Dir 指令 , 可以把某路徑下的資料夾 , 檔案 全部一次 List 出來 ,
包含 : FileDateTime , Size , Name
還有用 DOS 的 .bat 批次檔案 來執行 DOS 指令
在 Excel VBA 中 :
  1. Open "D:\Dir_Files.bat" For Output As #1
  2. Print #1, "D:"
  3. Print #1, "Cd Movie"
  4. Print #1, "Dir > D:\File_Size_Name.txt"
  5. Close #1
  6. Shell ("D:\Dir_Files.bat")
複製代碼


結果就出來了 : ( 開啟 D:\File_Size_Name.txt 檔案 )

磁碟區 D 中的磁碟是 Data
磁碟區序號:  BA77-7966

D:\Movie 的目錄

2017/08/09  下午 07:21    <DIR>          .
2017/08/09  下午 07:21    <DIR>          ..
2017/08/07  上午 06:07     4,857,133,080 ABP-623 愛音麻里亞 .mp4
2017/08/03  下午 06:16     3,723,925,144 MEYD-283 東凜 .mp4
2017/08/07  下午 12:23     3,699,664,260 MMND-130 羽?美晴 .mp4
2017/08/07  下午 12:48     3,736,532,029 MMND-131 深田奈奈 .mp4
               4 個檔案  16,017,254,513 位元組
               2 個目錄  939,158,974,464 位元組可用

再數數格子 , 就可算出檔案大小了 , 即使檔名有 VBA 無法辨識的字元 "羽?美晴" 。

作者: tryit244178    時間: 2017-8-12 11:48 AM

本帖最後由 tryit244178 於 2017-8-13 12:03 PM 編輯

噢…本來想叫你參考這頁的…
http://blog.bestdaylong.com/2010/01/excel_26.html
https://msdn.microsoft.com/zh-tw/library/aa711216(v=vs.71).aspx

補一下程式碼:
  1. Public Sub test()
  2.    Dim count As Integer
  3.    
  4.    Set fso = CreateObject("Scripting.FileSystemObject")
  5.    Set getFiles = fso.GetFolder("D:").Files    '取得路徑下的所有檔案
  6.    
  7.    count = 0

  8.    For Each fileList In getFiles
  9.       If CheckExtension(fileList.name, "mp3") Then
  10.          count = count + 1
  11.          Sheet1.Cells(count, 1).Value = fileList.name
  12.          Sheet1.Cells(count, 2).Value = fileList.Size
  13.       End If
  14.    Next fileList
  15. End Sub

  16. Private Function CheckExtension(ByVal path As String, ByVal extension As String) As Boolean
  17.    CheckExtension = False
  18.    
  19.    If LCase(Right(path, Len(extension) + 1)) = "." & LCase(extension) Then
  20.       CheckExtension = True
  21.    End If
  22. End Function
複製代碼


作者: Marry17Henry    時間: 2017-8-14 07:27 PM

感謝 tryit244178 大 ,
GetFolder.Files 真是好用 ,
能同時抓取 FileName & FilsSize
還能辨別 難字 , 日文字
不用再為檔名煩惱了 , 謝謝 。




歡迎光臨 伊莉討論區 (http://a11.eyny.com/) Powered by Discuz!