想請教各位大大,小弟手上只有檔案名稱的清單,但不清楚他原來路徑在哪,所以製作了一隻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
需比對的檔案不多時可用,過多時會出現錯誤或不動
@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
結論:以執行效率來說,第二個方法快非常多,只是需寫入到檔案,第一個方法吃記憶體又慢,真是不是個好做法,只是看起來好看用的.