iT邦幫忙

0

BAT 語法請教

想用BAT設排程備份一些資料,
但我需要備份的資料都在不同的資料夾內,
用COPY一個一個指路徑確實可達到我要的效果,
但我要備份的資料新增的速度也快,
變得要一直去維護這BAT,
我要備份的資料附檔名是相同的,
是否可用BAT尋找D:\下有關這副檔名的資料並且COPY,
達到備份且不用一直維護BAT的效果?

看更多先前的討論...收起先前的討論...
CalvinKuo iT邦大師 7 級 ‧ 2014-08-01 07:45:27 檢舉
win8可用Robocopy只備份指定附檔名....
http://tech.awids.com/?p=30
CalvinKuo iT邦大師 7 級 ‧ 2014-08-01 07:52:20 檢舉
不過目的地只能跟原始目錄結構一樣,沒蟹老闆的整理效果...
若是檔案多 每天用/MIR但會比蟹老板for + copy快,沒變動\新增就不複製... 也可以產生LOG.
CalvinKuo iT邦大師 7 級 ‧ 2014-08-01 10:40:01 檢舉
Win7或2003 SERVER以後的機器 還有 forfiles 可以用 加 /d -0 (今天新增/修改的檔案)
forfiles /P D: /s /m *.txt /d -0 /c "cmd /c copy @PATH" E:\備份

不清楚就先不要下/C,預設是"CMD /C ECHO @FILES",照上面這樣下COPY不同目錄同檔名會蓋掉...
CalvinKuo iT邦大師 7 級 ‧ 2014-08-01 10:48:36 檢舉
雙引號下錯...

forfiles /P D: /s /m *.txt /d -0 /c "cmd /c copy @PATH E:\備份"

8
蟹老闆
iT邦大師 1 級 ‧ 2014-07-31 22:31:36
最佳解答

b623142001提到:
一直去維護這BAT

策略錯誤!
為什麼將檔案儲存在任意位置,而不是將資料存到同一個路徑內?

<pre class="c" name="code">
for /f %%i in ('D:\dir *.txt /b /s') do Copy /y "%~fi" "E:\備份%~pi"

假設該類型的檔案有1000個但d:底下共有一萬個檔案,這樣的結果是執行了9000個無效的工作
所以還是訂個好策略會好管理些。

看更多先前的回應...收起先前的回應...
蟹老闆 iT邦大師 1 級 ‧ 2014-07-31 22:33:09 檢舉

for /f %%i in ('D:\dir *.txt /b /s') do Copy /y "%~fi" "E:\備份%~pi"

更正

<pre class="c" name="code">
for /f %%i in ('dir D:\*.txt /b /s') do Copy /y "%~fi" "E:\備份%~pi" 

我的資料,不是亂散...
我資料位置 例如:
d:\A012\111.txt
d:\A453\222.txt
d:\A314\333.txt
d:\A785\444.txt
d:\A813\555.txt
d:\A994\666.txt
而我要的只是想定期備份這些.txt檔
只是還會有新的資料出現,
不想要每次一直去改bat內容。

dir找出的資料 這邊變數的用法 我有點不太明白
可以在指導一下嗎 謝謝

蟹老闆 iT邦大師 1 級 ‧ 2014-07-31 22:55:57 檢舉

若整個D:都是儲存這類檔案則效率不變,若還有其它檔案改成如下會好一些。
D:\Source\A012\111.txt
D:\Source\A453\222.txt
D:\Source\A314\333.txt
D:\Source\A785\444.txt
D:\Source\A994\666.txt
又或直接使 Xcopy 加 /s 也是可行的但需考慮同檔名問題

蟹老闆 iT邦大師 1 級 ‧ 2014-07-31 22:58:29 檢舉

dir d:\*.txt /b /s 指的是dir出.txt的檔案 /s 是包含子資料夾裡的有要查找 /b是去除不必要的輸出資料以便 DO 後面做COPY的處理

蟹老闆 iT邦大師 1 級 ‧ 2014-07-31 23:05:39 檢舉

你的系統是?

win8

蟹老闆 iT邦大師 1 級 ‧ 2014-07-31 23:08:02 檢舉

我的是WIN7 測試OK
你在CMD裡輸入FOR /?查看 %~px 及 %~fx 是否能使用
基本上應該可行

蟹老闆 iT邦大師 1 級 ‧ 2014-07-31 23:10:49 檢舉

你似乎多了 copy /y ""%~fi" "d:\test%pi""
應該是 copy /y "%~fi" "d:\test%~pi" (看不到後面)

蟹老闆 iT邦大師 1 級 ‧ 2014-07-31 23:13:27 檢舉

應該是 copy /y "%%~fi" "d:\test%%~pi"
批次檔中要二個%%

蟹老闆 iT邦大師 1 級 ‧ 2014-07-31 23:15:10 檢舉

另外存檔不能存在D:\TEST另存因為會查找D:以下所有的

嗯 嘗試出來了 少一個%
真是謝謝 上了一課了

六小時候給最佳 Thanks

蟹老闆 iT邦大師 1 級 ‧ 2014-07-31 23:26:21 檢舉

很高興能幫到你

0
summertw
iT邦好手 1 級 ‧ 2014-08-01 08:45:06

b623142001提到:
用COPY一個一個指路徑確實可達到我要的效果,
但我要備份的資料新增的速度也快

好像不太對檔的用法...
即然是【要備份的資料新增的速度也快】..
表示檔案名稱不特定,而且一直在增加...
建議你,使用微軟自家生產,但沒有在廣告的一支【檔案同步】工具來備份..
微軟牌檔案備份、同步工具SyncToy..
有32位元及64位元版..
可設定檔案同步方式,可省掉很多麻煩,自動檢查檔案異動情況,備份速度極快...

找對工具,替你做事,可以事半功倍的...

0
player
iT邦大師 1 級 ‧ 2014-08-01 16:26:12

copy 能用的參數很少
建議請改用 xcopy
還有請把副檔名從 .bat 改成 .cmd
這樣可以用較新的批次檔語法
詳細用法請到MS網站查

我要發表回答

立即登入回答