Board logo

標題: [分享] 使用〔命令列 CMD〕的 DOS/Dir 指令取出檔案明細到EXCEL [打印本頁]

作者: 准提部林    時間: 2015-9-12 13:28     標題: 使用〔命令列 CMD〕的 DOS/Dir 指令取出檔案明細到EXCEL

本帖最後由 准提部林 於 2015-9-14 15:30 編輯

使用〔命令列.CMD〕的 DOS / Dir 指令取出檔案明細到EXCEL 

看到這題16樓.ikboy 大大的疑問:
[發問]多層資料夾尋找檔案的問題
http://forum.twbts.com/viewthrea ... a=pageD1&page=2
 

尚未去搜尋網上是否有這個VBA範例,先做個樣板試試,
本來想說應很簡單,執行卻時可時不可,修修改改如下,
若有更好修正版本,歡迎不吝提供! 

_不是專行,寫起來就是跌跌撞撞。
  1. Sub 取出檔案明細()
  2. Dim UF$, UP$, UT$, xD, FF, TRow, N&, j&, Brr, TT
  3. Call 清除
  4. UF = [A1].Value: If UF = "" Then Exit Sub '搜尋檔案名稱
  5. UP = ThisWorkbook.Path & "\" '搜尋路徑
  6. UT = UP & "UT_File.txt" '檔案明細文字檔檔名
  7.  
  8. '↓若文字檔還存在,刪除
  9. On Error Resume Next: Kill UT: On Error GoTo 0
  10. '↓以〔命令列〕DIR指令產生檔案明細文字檔
  11. Shell "cmd.exe /c dir """ & UP & UF & """ /s /b > " & UT, vbHide
  12. '↓以DIR檢測是否可以抓到文字檔(檔案可能尚未就緒)
  13. Do Until Dir(UT) <> "": Loop
  14. '↓檢測文字檔是否還在寫入中,否則開啟時只是空白資料
  15. Do Until CheckBookOpen(UT) = 0: Loop
  16.  
  17. '↓將文字檔內容逐筆納入〔字典檔〕
  18. Set xD = CreateObject("Scripting.Dictionary")
  19. FF = FreeFile
  20. Open UT For Input Access Read As #FF
  21. While Not EOF(1)
  22.   Line Input #FF, TRow
  23.   N = N + 1: xD(N) = TRow
  24. Wend
  25. Close #FF
  26. If N = 0 Then MsgBox "找不到檔案! ": Exit Sub
  27.  
  28. '↓將字典檔內容拆出〔檔案名稱.完整路徑〕納入陣列
  29. ReDim Brr(N - 1, 1): N = 0
  30. For Each FF In xD.items
  31.   If FF <> ThisWorkbook.FullName Then
  32.    TT = InStrRev(FF, "\")
  33.    Brr(N, 0) = Mid(FF, TT + 1)
  34.    Brr(N, 1) = FF
  35.    N = N + 1
  36.   End If
  37. Next
  38.  
  39. [A4:B4].Resize(N) = Brr '填入資料
  40. Kill UT '刪去文字檔
  41. End Sub
複製代碼
附件下載:
[attach]21955[/attach]

注意:儘量不要在〔根目錄〕中執行,也儘量不要使用〔*.*〕去搜檔案,(量可能太大)∼∼
 
作者: ikboy    時間: 2015-9-12 15:36

多謝准版大的耐心列出完整代碼並指出未就緒陷阱,及提點到較高系統會對C:\ root管制事而,想來還是用回fso較正道了。

來自我的小米手機
作者: 老夏    時間: 2015-9-12 16:49

本帖最後由 老夏 於 2015-9-12 16:53 編輯

把檔案總管搬入Excel控件內直接使用
如何?
//這叫做OLE
MFC  COM
https://msdn.microsoft.com/zh-tw/library/k851ext3.aspx
OLE機制
作者: 老夏    時間: 2015-9-12 19:52

本帖最後由 老夏 於 2015-9-12 20:00 編輯

滑鼠拉一拉點一點完工直接用
寫蛇魔程式碼?
[attach]21956[/attach]
作者: 准提部林    時間: 2015-9-12 20:09

本帖最後由 准提部林 於 2015-9-12 20:15 編輯

回復 4# 老夏


謝謝大大的參與!
 
請參考此題:
多層資料夾尋找檔案的問題
http://forum.twbts.com/thread-11369-1-1.html

假設有一個檔案,只知道存在某個〔資料夾〕中,但不知是放在哪個〔子資料夾〕,
而〔子資料夾〕中又有〔子資料夾〕,〔層數〕也不確定,如何快速找到這個檔案並〔自動開啟〕它?

那帖已有幾位大大提供正規又有效的方法,
此帖是另類方法,純參考,並非最好方案!
作者: ML089    時間: 2015-9-12 23:21

回復 1# 准提部林

我目前使用 windows10系統,目錄檔案權限有些不同,檔案總管可以開啟及回存,但用shell cmd dir ... > file 就是不能寫入檔案

另外目錄檔案不符合dos8.3規則時也需要修改
Shell "cmd.exe /c dir " & UP & UF & " /s /b > " & UT, vbHide
改為
Shell "cmd.exe /c dir """ & UP & UF & " /s /b > """ & UT, vbHide
作者: yoyobuy    時間: 2015-9-12 23:29

回復 6# ML089


有新版os 就一直升級
到底能獲得何種好處?
作者: ML089    時間: 2015-9-12 23:46

回復 7# yoyobuy

工具就是這樣,有雞刀用雞刀,有牛刀用牛刀,只要能完成任務就是好刀。

有些人的系統是win98或win10不一定,有些人的excel是2003或2013也不一定。

論壇就是討論各種方法各取所需,沒有甚麼是最好或不好,符合自己的需求最好。
作者: 老夏    時間: 2015-9-13 07:42

本帖最後由 老夏 於 2015-9-13 07:44 編輯

回覆5樓准提部林

開始功能表已經提供搜尋介面
擺著不用與Excel何干
[attach]21958[/attach]
作者: 准提部林    時間: 2015-9-13 11:01

回復 6# ML089


寫程式就是怕使用版本不同而發生不能作用,專業高手可以用Version判斷而區別語法,對只有舊版本者,似乎就綁手!
本來 FileSearch 就很好用,不知為何在較高版本微軟反而廢掉了?
DIR 或 FSO,要搜包含〔子資料夾〕檔案,對VBA新手確是有難度,好在網上已有眾多高手提供現成語去可套用!

使用 cmd 取出〔所有檔案〕明細,是練〔外丹功〕,可能太硬解!

謝謝版主提供珍貴的訊息!
作者: 准提部林    時間: 2015-9-13 11:30

回復 7# yoyobuy


換個角度,可以這樣說嗎? 「我們都被〔微軟〕的作業平台綁住了!」
微軟與硬體廠商結盟,PC出廠就已灌好最新的系統,用不用呢?
又,以OFFICE為例,新舊版的所謂〔相容性〕,根本是騙人的,與〔相溶性〕相差太遠;
其目的就是要賺錢,要您一直花錢更新,但這是企業的本性,
使用者可發非難之辭,但也無可奈何!

目前還只用較舊版的系統及應用程式,
但遇到與廠商及客戶的〔資料檔案〕交換,因版本不同,可能造成雙方的困擾,
所以,早晚還是要去升級的。
作者: starry1314    時間: 2015-9-14 11:44

回復 4# 老夏
請問這是如何找到web那個檔?
作者: 老夏    時間: 2015-9-14 17:30

回復  老夏
請問這是如何找到web那個檔?
starry1314 發表於 2015-9-14 11:44


Office 2000
控制工具箱內的東西

[attach]21974[/attach]




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)