iT邦幫忙

0

尋找檔案,Copy檔案,Script or 程式

  • 分享至 

  • xImage

想請教各位大大,小弟手上只有檔案名稱的清單,但不清楚他原來路徑在哪,所以製作了一隻bat來執行。

我只知道檔案會在E:\image2016\data\ temp01~10這幾個目錄內,所以我用E:\list.txt這清單去比對,比對確認後Copy到F:\Folder這目錄底下,我copy的檔案是E:\image2016\data\ temp01~10之後的目錄含檔案。

Ex: E:\image2016\data\ temp01\2016\09\08\0001\test.txt Copy to 
        F:\Folder2016\09\08\0001\test.txt

檔案架構像上述這樣,我目前遇到執行後 ,CMD畫面就停在那邊沒有動作,寫入的log檔大小也沒有再增大,只有寫入時間有異動而已,新的Folder檔案大小也沒有在異動了。

想請教各位大大,這是否還有哪裡需要修正,或是有推薦軟體可以使用。

set src_folder=E:\image2016\data\ 
set dst_folder=F:\Folder
setlocal enabledelayedexpansion

for /f %%c in (E:\temp.txt) do (
   		   
  set valC=%%c
      			  
   for /f %%a in (E:\list.txt) do echo f | (dir %src_folder% /s /a-d /b /o:n | find /v /i "%%a") |  xcopy "%src_folder%"!valC!\*.* "%dst_folder%" /Y /D /S /F
		   
   ) >>F:\list.txt
		
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
蟹老闆
iT邦大師 1 級 ‧ 2016-09-10 12:23:05
最佳解答

需比對的檔案不多時可用,過多時會出現錯誤或不動

@Echo Off
set src_folder=D:\data&Rem 搜尋路徑
set dst_folder=D:\Folder&Rem 目地路徑
Set List=D:\List.txt&Rem 現有檔案名稱
for /R "%src_folder%" %%i in (*) do Findstr /B /E /C:"%%~nxi" "%List%"&&(Echo F|Xcopy /Y /D /S /F "%%i" "%dst_folder%%%~pxni")||Echo 還在執行中:"%%~nxi"&Echo 比對不到:"%%~nxi">>NotToExist.txt)

有大量的檔案應該用這個

@Echo Off
set src_folder=D:\data&Rem 搜尋路徑
set dst_folder=D:\Folder&Rem 目地路徑
Set List=D:\List.txt&Rem 現有檔案名稱
Del tmp1.txt tmp2.txt 1>Nul
Dir /a-d /b /s "%src_folder%" >Tmp1.txt
For /f "delims=" %%i in (%List%) do findstr /e /c:"\%%i" Tmp1.txt >>Tmp2.txt
For /f "delims=" %%j in (Tmp2.txt) do Echo F|Xcopy /Y /D /S /F "%%j" "%dst_folder%%%~pxnj"
Del tmp1.txt tmp2.txt

結論:以執行效率來說,第二個方法快非常多,只是需寫入到檔案,第一個方法吃記憶體又慢,真是不是個好做法,只是看起來好看用的.

zp145 iT邦新手 5 級 ‧ 2016-09-10 19:40:37 檢舉

謝謝蟹老闆。
按照你的方式,我測試發現Tmp2會沒有資料寫進去。
會是因為我的檔案格式,如下圖,所以他名稱沒法分隔嗎?

http://ithelp.ithome.com.tw/upload/images/20160910/20075894jHeEFnLX9F.png

蟹老闆 iT邦大師 1 級 ‧ 2016-09-10 21:42:00 檢舉

"%%i" 中的 \ 不可缺少
%List%中的清單只能是檔名不能有其它如路徑或"" 字串,例"檔名.副檔名" 的無關字串
查看是否字串前後是否有空白字元

比對時會用 /清單中的檔名 也可以是 /清單.中的.檔名.副檔名 這個字串去比對

蟹老闆 iT邦大師 1 級 ‧ 2016-09-10 21:43:09 檢舉

Tmp2.txt 是 2 個 > 符號

我要發表回答

立即登入回答