標題:
[分享]
使用〔命令列 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範例,先做個樣板試試,
本來想說應很簡單,執行卻時可時不可,修修改改如下,
若有更好修正版本,歡迎不吝提供!
_不是專行,寫起來就是跌跌撞撞。
Sub 取出檔案明細()
Dim UF$, UP$, UT$, xD, FF, TRow, N&, j&, Brr, TT
Call 清除
UF = [A1].Value: If UF = "" Then Exit Sub '搜尋檔案名稱
UP = ThisWorkbook.Path & "\" '搜尋路徑
UT = UP & "UT_File.txt" '檔案明細文字檔檔名
'↓若文字檔還存在,刪除
On Error Resume Next: Kill UT: On Error GoTo 0
'↓以〔命令列〕DIR指令產生檔案明細文字檔
Shell "cmd.exe /c dir """ & UP & UF & """ /s /b > " & UT, vbHide
'↓以DIR檢測是否可以抓到文字檔(檔案可能尚未就緒)
Do Until Dir(UT) <> "": Loop
'↓檢測文字檔是否還在寫入中,否則開啟時只是空白資料
Do Until CheckBookOpen(UT) = 0: Loop
'↓將文字檔內容逐筆納入〔字典檔〕
Set xD = CreateObject("Scripting.Dictionary")
FF = FreeFile
Open UT For Input Access Read As #FF
While Not EOF(1)
Line Input #FF, TRow
N = N + 1: xD(N) = TRow
Wend
Close #FF
If N = 0 Then MsgBox "找不到檔案! ": Exit Sub
'↓將字典檔內容拆出〔檔案名稱.完整路徑〕納入陣列
ReDim Brr(N - 1, 1): N = 0
For Each FF In xD.items
If FF <> ThisWorkbook.FullName Then
TT = InStrRev(FF, "\")
Brr(N, 0) = Mid(FF, TT + 1)
Brr(N, 1) = FF
N = N + 1
End If
Next
[A4:B4].Resize(N) = Brr '填入資料
Kill UT '刪去文字檔
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/)