請教大量條件搜尋大量檔案的方法? - iT 邦幫忙

文章推薦指數: 80 %
投票人數:10人

就是有上萬個檔案(容量1X~5XG), 要從裡面篩選出指定條件的檔案, 複製到指定資料夾內, ... 所以剛開始小弟是用,VBA 產生bat 檔去搜尋資料夾, 1 請教大量條件搜尋大量檔案的方法? 程式設計 q00153 2016-01-0410:57:13‧12319瀏覽 小弟最近遇到兩件案子, 需求一樣, 就是有上萬個檔案(容量1X~5XG), 要從裡面篩選出指定條件的檔案, 複製到指定資料夾內, 如果有重複的就用比較新的檔案覆蓋舊的檔案, 篩選條件有上千個, 只要符合的就篩選出來, 因為使用者想用Excel(輸入篩選條件會比較好用), 所以剛開始小弟是用,VBA產生bat檔去搜尋資料夾, 用for迴圈+copy指令, 可是太慢了=口=... 重點是,會當機,根本不能使用。

直接用VBA去搜尋也會當掉, 從網路下載的一些用來搜尋的軟體也會當掉... ㄜ~~請問有前輩遇過這種需求嗎? 大量條件搜尋大量檔案的方法??? 回答3 討論22 邀請回答 追蹤 檢舉 × 邀請回答 輸入邀請回答者的帳號或暱稱 Loading 找不到結果。

已達邀請上限 邀請回答 {{result.user.nickname}} {{result.user.account}} 已邀請的邦友{{invite_list.length}}/5 取消邀請 {{invite.nickname}} {{invite.account}} 關閉 看更多先前的討論...收起先前的討論... aeolus0829 iT邦研究生4級‧ 2016-01-0411:28:15 檢舉 不清楚你所謂的'符合特定條件'是什麼樣的條件?可否舉具體的例子? 比如說某種副檔名、某個日期 我會選擇用cygwin撘配批次檔做這件事 (VBA還要開一個office實體在那邊,一是效能不彰,二是殺雞用牛刀) 不清楚你所謂的'符合特定條件'是什麼樣的條件?可否舉具體的例子? 比如說某種副檔名、某個日期 我會選擇用cygwin撘配批次檔做這件事 (VBA還要開一個office實體在那邊,一是效能不彰,二是殺雞用牛刀) 修改 fillano iT邦超人1級‧ 2016-01-0411:44:33 檢舉 另外一個要問的是:什麼檔?(純文字?程式?圖檔?Excel?Word?)如果你要搜尋的是「檔案內容」的話... 另外一個要問的是:什麼檔?(純文字?程式?圖檔?Excel?Word?)如果你要搜尋的是「檔案內容」的話... 修改 q00153 iT邦新手3級‧ 2016-01-0411:46:54 檢舉 符合特定條件==>是指部份檔名或副檔名,由使用者自行設定。

還要開一個office是因為使用者想要用Excel來設定條件, 所以想說用VBA讀取Excel內設定的條件產生搜尋檔案的程式碼, 再執行該程式,來搜尋檔案。

目前是產生相關的bat檔,可是效率不彰。

符合特定條件==>是指部份檔名或副檔名,由使用者自行設定。

還要開一個office是因為使用者想要用Excel來設定條件, 所以想說用VBA讀取Excel內設定的條件產生搜尋檔案的程式碼, 再執行該程式,來搜尋檔案。

目前是產生相關的bat檔,可是效率不彰。

修改 q00153 iT邦新手3級‧ 2016-01-0411:49:30 檢舉 回大大~不用搜尋檔案內容, 只要能搜尋檔案名稱就可以了, 問題是路徑不固定,所以要檔案無論放多深都找的到~ 找到檔案後複製到指定的資料夾蒐集起來,不用複製目錄結構,只要該檔案就好, 搜尋的檔案類型不指定,不過以文字跟圖片檔居多~ 回大大~不用搜尋檔案內容, 只要能搜尋檔案名稱就可以了, 問題是路徑不固定,所以要檔案無論放多深都找的到~ 找到檔案後複製到指定的資料夾蒐集起來,不用複製目錄結構,只要該檔案就好, 搜尋的檔案類型不指定,不過以文字跟圖片檔居多~ 修改 蟹老闆 iT邦大師1級‧ 2016-01-0412:29:37 檢舉 肯定快不了 N千*近萬怎麼快得了 肯定快不了 N千*近萬怎麼快得了 修改 fillano iT邦超人1級‧ 2016-01-0413:59:14 檢舉 建議的做法:分階段,每一階段用不同程式處理 1.掃出所有檔案,將路徑、檔名、日期等資料存在一個資料檔(資料庫、文字檔、xml、json等都可以,看你習慣處理的格式) 2.根據篩選條件,篩選過上述資訊,再產生一個資料檔 3.根據需要的條件,去除上述資料檔中重複的資料,再產生一個資料檔 4.根據前一步驟的資料檔,產出複製檔案的batch 5.執行batch檔來把檔案複製到目標 建議的做法:分階段,每一階段用不同程式處理 1.掃出所有檔案,將路徑、檔名、日期等資料存在一個資料檔(資料庫、文字檔、xml、json等都可以,看你習慣處理的格式) 2.根據篩選條件,篩選過上述資訊,再產生一個資料檔 3.根據需要的條件,去除上述資料檔中重複的資料,再產生一個資料檔 4.根據前一步驟的資料檔,產出複製檔案的batch 5.執行batch檔來把檔案複製到目標 修改 海綿寶寶 iT邦大神1級‧ 2016-01-0414:33:55 檢舉 q00153提到:上萬個檔案(容量1X~5XG) Windows的檔案總管不合用嗎

q00153提到:上萬個檔案(容量1X~5XG)
Windows的檔案總管不合用嗎 修改 q00153 iT邦新手3級‧ 2016-01-0415:05:56 檢舉 因為搜尋條件有上千個(基本是一天是3千多筆) 用檔案總管找User應該會死掉 因為搜尋條件有上千個(基本是一天是3千多筆) 用檔案總管找User應該會死掉 修改 q00153 iT邦新手3級‧ 2016-01-0415:11:42 檢舉 感謝大大的建議~ ㄜ~~方便再請教, 第一步掃描所有檔案,用什麼程式語言寫比較快嗎? 因為要這麼多的檔案,如果能將時間壓縮在一個早上(4HR)之內,有可能嗎? 小弟願意學習,只是怕寫出來效能低下,或是當機而已。

不過以前學校學過C/C++, 雖然他是很快的程式語言, 印象中會被中文路徑搞死 感謝大大的建議~ ㄜ~~方便再請教, 第一步掃描所有檔案,用什麼程式語言寫比較快嗎? 因為要這麼多的檔案,如果能將時間壓縮在一個早上(4HR)之內,有可能嗎? 小弟願意學習,只是怕寫出來效能低下,或是當機而已。

不過以前學校學過C/C++, 雖然他是很快的程式語言, 印象中會被中文路徑搞死 修改 海綿寶寶 iT邦大神1級‧ 2016-01-0415:43:42 檢舉 這個批次檔可以cover部份需求 提供參考看看... FOR/RC:\%%fIN(TOKYO*.MP4)DOCOPY%%fD:\LOGDATA FOR/RE:\%%fIN(*HOT.AVI)DOCOPY%%fD:\LOGDATA 這個批次檔可以cover部份需求 提供參考看看... FOR/RC:\%%fIN(TOKYO*.MP4)DOCOPY%%fD:\LOGDATA FOR/RE:\%%fIN(*HOT.AVI)DOCOPY%%fD:\LOGDATA 修改 海綿寶寶 iT邦大神1級‧ 2016-01-0415:48:12 檢舉 其實治本的方式應該是從「修改那些產生檔案的程式」著手 不過你大概不想這麼做 因為很麻煩 其實治本的方式應該是從「修改那些產生檔案的程式」著手 不過你大概不想這麼做 因為很麻煩 修改 窮嘶發發發 iT邦高手1級‧ 2016-01-0416:01:33 檢舉 用VBA先去LIST檔案清單,轉到一張資料表 然後再用VBA去資料表找資料,接著再用VBA去作後續的檔案寫入動作 這樣才是比較快的處理方式,畢竟,你只是要找檔名跟副檔名而已 用VBA先去LIST檔案清單,轉到一張資料表 然後再用VBA去資料表找資料,接著再用VBA去作後續的檔案寫入動作 這樣才是比較快的處理方式,畢竟,你只是要找檔名跟副檔名而已 修改 fillano iT邦超人1級‧ 2016-01-0416:03:34 檢舉 我是用node.js...不過建議你還是用你比較熟悉的程式語言/工具來做。

我會使用script來做,主要是因為不需要編譯,比較順手... 至於第一步驟的檔案清單,用dir/s/b就可以(不過如果要日期的話,還需要其他欄位,這樣用dir不太容易跑出程式容易處理的清單,也許可以考慮改個方法,先根據日期外的條件過濾,然後才根據清單去找出日期來過濾) 我是用node.js...不過建議你還是用你比較熟悉的程式語言/工具來做。

我會使用script來做,主要是因為不需要編譯,比較順手... 至於第一步驟的檔案清單,用dir/s/b就可以(不過如果要日期的話,還需要其他欄位,這樣用dir不太容易跑出程式容易處理的清單,也許可以考慮改個方法,先根據日期外的條件過濾,然後才根據清單去找出日期來過濾) 修改 weiclin iT邦高手4級‧ 2016-01-0416:17:29 檢舉 +1 只有上萬個檔名而已.. 先把檔名整理成一個列表再搜尋,根本小菜一碟 +1 只有上萬個檔名而已.. 先把檔名整理成一個列表再搜尋,根本小菜一碟 修改 蟹老闆 iT邦大師1級‧ 2016-01-0417:35:24 檢舉 q00153提到:一個早上(4HR)之內,有可能嗎? 四小時太多了,一個小時以內應該是OK的
q00153提到:一個早上(4HR)之內,有可能嗎?
四小時太多了,一個小時以內應該是OK的 修改 小成 iT邦高手10級‧ 2016-01-0508:13:13 檢舉 推一下蒐尋軟體,everything https://www.voidtools.com/ 推一下蒐尋軟體,everything https://www.voidtools.com/ 修改 小成 iT邦高手10級‧ 2016-01-0508:14:42 檢舉 喔,我看到條件有上千個了,我原本以為只有檔案很多,條件不多... 喔,我看到條件有上千個了,我原本以為只有檔案很多,條件不多... 修改 newkevin iT邦高手1級‧ 2016-01-0518:16:56 檢舉 前題 檔案檔名不會增加 這樣才可能吧 應該每天增加的檔名也要+進去吧 前題 檔案檔名不會增加 這樣才可能吧 應該每天增加的檔名也要+進去吧 修改 蟹老闆 iT邦大師1級‧ 2016-01-0523:57:15 檢舉 試試看吧! 因為forfiles一次只能搜尋單一條件,所以還是用DIR來進行多條件的效率搜尋應該比較好,本想用FORFILES搭FOR來做檔名與附檔名的條件,但因FORFILES搭FOR不好使,所以只提供了不限附檔名的範例,如還是需要考慮副檔名,可以將%%?.*換成%%?.jpg或其它,也可以將%%?.*換成%%?如果換成%%?的話必須在條件資料檔中包含副檔名. @EchoOff SetFiles=1.csv SetTarget=.\test\ IfNotExist%Target%Md%Target% Echo開始時間%Time%>Timer.txt For/f"Delims=,Tokens=1-26"%%aIn('Type%Files%')Do( For/f%%aIn('Dir/b/s%%a.*%%b.*%%c.*%%d.*%%e.*%%f.*%%g.*%%h.*%%i.*%%j.*%%k.*%%l.*%%m.*%%n.*%%o.*%%p.*%%q.*%%q.*%%r.*%%s.*%%t.*%%u.*%%v.*%%w.*%%x.*%%y%%z.*')Do( Echo正在處理%%a Xcopy/c/d/y"%%a""%Target%")) Echo結束時間%Time%>>Timer.txt 這個批次檔須放在要搜尋的目錄最上層,另外會產生一個TEST的資料夾,這裡是要放要複製的檔案 要注意的是條件檔需放在與批次檔同一個目錄中,且需是.CSV格式的檔案,每一列最多只能26個(欄)條件,不到26個也可以,但會增加搜尋的時間 可以修改 Files=1.csv為自訂的名稱 Target=.\test\為目標位置 更正預估的時間,因為都小檔,所需的時間可能會更久,但也不至於四個小時..... 試試看吧! 因為forfiles一次只能搜尋單一條件,所以還是用DIR來進行多條件的效率搜尋應該比較好,本想用FORFILES搭FOR來做檔名與附檔名的條件,但因FORFILES搭FOR不好使,所以只提供了不限附檔名的範例,如還是需要考慮副檔名,可以將%%?.*換成%%?.jpg或其它,也可以將%%?.*換成%%?如果換成%%?的話必須在條件資料檔中包含副檔名. @EchoOff SetFiles=1.csv SetTarget=.\test\ IfNotExist%Target%Md%Target% Echo開始時間%Time%>Timer.txt For/f"Delims=,Tokens=1-26"%%aIn('Type%Files%')Do( For/f%%aIn('Dir/b/s%%a.*%%b.*%%c.*%%d.*%%e.*%%f.*%%g.*%%h.*%%i.*%%j.*%%k.*%%l.*%%m.*%%n.*%%o.*%%p.*%%q.*%%q.*%%r.*%%s.*%%t.*%%u.*%%v.*%%w.*%%x.*%%y%%z.*')Do( Echo正在處理%%a Xcopy/c/d/y"%%a""%Target%")) Echo結束時間%Time%>>Timer.txt 這個批次檔須放在要搜尋的目錄最上層,另外會產生一個TEST的資料夾,這裡是要放要複製的檔案 要注意的是條件檔需放在與批次檔同一個目錄中,且需是.CSV格式的檔案,每一列最多只能26個(欄)條件,不到26個也可以,但會增加搜尋的時間 可以修改 Files=1.csv為自訂的名稱 Target=.\test\為目標位置 更正預估的時間,因為都小檔,所需的時間可能會更久,但也不至於四個小時..... 修改 窮嘶發發發 iT邦高手1級‧ 2016-01-0612:51:08 檢舉 我LIST10萬個檔名到文字檔,只需要10秒鐘 他只有上萬個,是會需要多久啊 我LIST10萬個檔名到文字檔,只需要10秒鐘 他只有上萬個,是會需要多久啊 修改 蟹老闆 iT邦大師1級‧ 2016-01-0613:14:31 檢舉 jones888提到:他只有上萬個,是會需要多久啊 還要考慮檔案COPY的時間
jones888提到:他只有上萬個,是會需要多久啊
還要考慮檔案COPY的時間 修改 蟹老闆 iT邦大師1級‧ 2016-01-0613:19:52 檢舉 Dir /b /s  要改為dir/b/s/a-d

Dir /b /s 

要改為dir/b/s/a-d

修改 登入發表討論 3個回答 舊至新 新至舊 最高Like數 8 wiseguy iT邦超人1級‧2016-01-0522:07:49 最佳解答 q00153提到: 請問有前輩遇過這種需求嗎? 大量條件搜尋大量檔案的方法??? 有。

用Linux的find,快又有效。

http://sourceforge.net/projects/unxutils/files/unxutils/current/UnxUtils.zip/download 因為你沒給條件例子,所以我也給不出範例,自己琢磨囉 回應 分享 檢舉 登入發表回應 6 shilong_chang iT邦新手5級‧2016-01-0417:33:01 你的問題不是很明瞭,假設是要從D主機copy到E主機,或者是要從D資料夾copy到E資料夾,而且包含所屬的所有子資料夾,這一些資料夾以及檔案裡面全部包含了600萬個檔案,可以簡單的做 Xcopyd:\*.*e:\/o/s/e/d/c/y 或是xcopyD:\abc\*.*D:\xyz\/o/s/e/d/c/y 或是xcopyd:\abc\*.*\\192.168.1.xx\xyz\/o/s/e/d/c/y 試試看吧,另外如果不介意裝個軟體的話,請找微軟出的robocopy也可以做到一樣的效果 回應 1 分享 檢舉 CalvinKuo iT邦大師7級‧ 2016-01-0418:03:59 檢舉 下面這個也不錯用(Vista/2003以上作業系統) Forfiles cmdforfiles從文件夾或樹中選擇要進行批處理的文件(方便批量刪除n天前的文件) 下面這個也不錯用(Vista/2003以上作業系統) [Forfiles](https://technet.microsoft.com/zh-tw/library/cc753551%28v=ws.10%29.aspx) [cmdforfiles從文件夾或樹中選擇要進行批處理的文件(方便批量刪除n天前的文件)](http://codex.wiki/post/111773-355) 修改 登入發表回應 0 haoming iT邦好手1級‧2016-01-0716:06:01 要不要考慮用grepWin,搜尋速度很快。

而且支援regex要做單純的或者複雜搜尋都沒問題。

只是前提要是文字類型檔案。

回應 1 分享 檢舉 wiseguy iT邦超人1級‧ 2016-01-0717:49:25 檢舉 q00153提到: 不用搜尋檔案內容,要能搜尋檔案名稱就可以了, 發問者只要找檔名,應該是用不到grep這麼強大的武器。

>**q00153**提到: >不用搜尋檔案內容,要能搜尋檔案名稱就可以了, 發問者只要找檔名,應該是用不到grep這麼強大的武器。

修改 登入發表回應 我要發表回答 立即登入回答 相關問題 [Ruby]Ruby要怎麼樣才能使用windows命令列裡的指令呢? 請問JAVA語言都用什麼方式寫報表程式? 非Windows的程式設計該用那一套!? C#疑問 私立大學讀商學院,畢業後想至資策會上6個月期密集程式設計班,未來計劃朝軟體或MIS發展,可否請大家給個意見參考? 寫程式與離散數學的關係 大學四年過去了,我該怎麼走下一步? 想要學手機APP程式設計 網站線上刷卡串連報價 請問關於JavaScript呼叫Function時,有括弧與無括弧的差異 iT邦幫忙鐵人賽 參賽組數 1087組 團體組數 52組 累計文章數 20455篇 完賽人數 572人 鐵人賽最新文章 DevFest'21Hsinchu&Taichung議程錄影上線啦! 建立第一個單元測試(golang)-2(Day21) 更新網格交易機器人 STM32的開發生態,Cube、HAL庫、LL庫 閒聊STM32CubeMX和STM32CubeIDE 建立第一個單元測試(golang)-1(Day20) Day38-在AWSLambda中使用YOLO推估(Inference) Day37-在AWSLambda建立OpenCVLayer Day36-使用Container建立AmazonSageMaker端點 Day35-AmazonSageMaker簡介 前往鐵人賽 技術推廣專區 [Day2]抓取每日收盤價 [Day1]基本工具安裝 利用python取得永豐銀行API的Nonce [Day03]tinyML開發板介紹 永豐金融API測試員 [Day01]在享受tinyML這道美食之前 [Day3]使用ta-lib製作指標 [Day4]函數打包與買進持有報酬率試算 計算API所需要的參數:HashID 計算API所需要的參數:IV 前往鐵人賽 熱門問題 入門軟體工程師一些術語 想用網路線達到KVM的效果??? Chrome暗黑模式,CSS的媒體選擇器 系統工程師的sideproject ASP.NET發行網站IIS架站連接資料庫發生錯誤【於資料庫'master'中,CREATEDATABASE的權限遭拒】 解析郵件附檔 考研究所需有關的資安題目 pdf多頁轉成ppt單頁 一台電腦可否同時安裝Win7和Win10作業系統嗎? 跪求SQL大神 IT邦幫忙 站方公告 2021iThome鐵人賽精彩文章超過2萬篇,預計12月揭曉本屆獲勝鐵人 熱門tag 看更多 13th鐵人賽 12th鐵人賽 11th鐵人賽 鐵人賽 2019鐵人賽 2018鐵人賽 javascript 2017鐵人賽 windows php python windowsserver linux c# 程式設計 資訊安全 css vue.js sql 分享 熱門回答 入門軟體工程師一些術語 MySQLselect後刪除問題 如何用pyhton在網頁中呈現可互動的資料視覺化圖形 想用網路線達到KVM的效果??? 解析郵件附檔 ASP.NET發行網站IIS架站連接資料庫發生錯誤【於資料庫'master'中,CREATEDATABASE的權限遭拒】 pdf多頁轉成ppt單頁 請問用VM架FTP.如何讓外網連入(NAT&映射) linux常用服務架設 一台電腦可否同時安裝Win7和Win10作業系統嗎? 熱門文章 桃園機場公司徵求資訊夥伴,邀請您一起加入我們的團隊! 建立第一個單元測試(golang)-2(Day21) DevFest'21Hsinchu&Taichung議程錄影上線啦! 我的讀書方法 ITCertificationsExamPreparation Python&SQLALchemy學習筆記_查詢 如何免費將PDF拆分為多個文件 HTML筆記(00)-為什麼我會想學網頁開發? 為了轉生而點技能,難題紀錄(一)Hoisting篇。

[SAP][PP]計劃單轉工單_BOM問題? 一週點數排行 更多點數排行 海綿寶寶(antijava) ㊣浩瀚星空㊣(yoching) raytracy(raytracy) japhenchen(japhenchen) ccenjor(ccenjor) fillano(fillano) 一級屠豬士(hitomitanaka) juck30808(juck30808) chun8106(chun8106) souda(souda) × At 輸入對方的帳號或暱稱 Loading 找不到結果。

標記 {{result.label}} {{result.account}} 關閉


請為這篇文章評分?


延伸文章資訊