查看完整版本: 檔名有 VBA 無法辨別的字元 , 如何查出檔案大小 ?
頁: [1]

Marry17Henry 發表於 2017-8-9 07:53 PM

檔名有 VBA 無法辨別的字元 , 如何查出檔案大小 ?

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

又遇到困難了 , 要列出某資料夾內檔案名稱 , 可以使用下列方式 :
File_Name = Dir("D:\Movie\*.mp4")
While File_Name <> ""
         ...
         ...
         File_Name = Dir()
Wend
如果要查出這些檔案大小 , 可以用 FileLen(File_Name) 指令 ,
但如果遇到檔名有 VBA 無法辨別的字元 , 例如 MMND-130 羽咲美晴.mp4
VBA 跑出的結果會變成 File_Name ="MMND-130 羽?美晴.mp4"
這還可以忍受 , 但如果要查出檔案大小 , 會因檔名不正確而產生程式錯誤 ,
該怎麼查出檔案大小呢 ?


...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

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 中 :
Open "D:\Dir_Files.bat" For Output As #1
Print #1, "D:"
Print #1, "Cd Movie"
Print #1, "Dir > D:\File_Size_Name.txt"
Close #1
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 無法辨識的字元 "羽?美晴" 。
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

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

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

   For Each fileList In getFiles
      If CheckExtension(fileList.name, "mp3") Then
         count = count + 1
         Sheet1.Cells(count, 1).Value = fileList.name
         Sheet1.Cells(count, 2).Value = fileList.Size
      End If
   Next fileList
End Sub

Private Function CheckExtension(ByVal path As String, ByVal extension As String) As Boolean
   CheckExtension = False
   
   If LCase(Right(path, Len(extension) + 1)) = "." & LCase(extension) Then
      CheckExtension = True
   End If
End Function
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

Marry17Henry 發表於 2017-8-14 07:27 PM

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