iT邦幫忙

0

如何以批次檔同時同步多個外接式磁碟機(代號會跳)?

來源:本機硬碟某個目錄
目的:外接式硬碟、隨身碟、抽取式讀卡機等,多台,最多6台
需求:來源==>目的,檔案同步,方式為覆蓋(mirror)+跳過既有同名檔案

請問該如何以批次檔完成這操作?
主要是因為磁碟代號會跳,我希望插入外接設備之後,只要執行一個批次檔,就同時同步過去,最後一個同步完成時,顯示訊息或是播放一個提示音。

感謝大家幫忙。

看更多先前的討論...收起先前的討論...
小成 iT邦高手 10 級 ‧ 2011-04-22 15:46:08 檢舉
請問一下,你的批次是要由USER自行啟動來做同步嗎?
還是要自動呢?
另外請問一下OS是?

我是這樣子的想法
如果我將批次放在卸除式磁碟上,這樣子點兩下執行的時候,應該是會以目前執行檔放置的目錄作為工作目錄,所以我就可以下類似 copy c:\dir1\file.xxx .\dir 的命令
就不用管它目前是使用哪個磁碟代號
如果需要自動,用AUTORUN.INF不知道可不可行?

或者卸除式磁碟中放個檔案作為標誌
然後執行批次時,for從C到Z,如果某磁碟機裡面存在這個標誌檔,那就設變數值為這個磁碟機代號,然後再做COPY的動作

那如果要做MIRROR的話,WIN7可以用ROBOCOPY
ROBOCOPY source destination /MIR
(如果需要連安全性一起處理的話,可以參考ROBOCOPY的HELP)
如果是XP...我知道2003的resource kit tools裡面有ROBOCOPY的樣子,應該也可以用在XP吧?
1.USER自行執行,是的
2.ok只是xp
3.先期檔案放在外接碟,首先就遇到,這個檔案要怎麼進入?這問題囉

請大家幫忙想想囉
小成 iT邦高手 10 級 ‧ 2011-04-23 10:20:50 檢舉
檔案怎麼進入?
USER自行點開我的電腦,點開磁碟機,然後執行檔案,這樣不行嗎?
小成 iT邦高手 10 級 ‧ 2011-04-28 12:40:58 檢舉
我看到同時兩個字了
小成 iT邦高手 10 級 ‧ 2011-12-14 14:02:29 檢舉
是BAT嗎?
我目前是想到土法煉鋼爛方法..
bat執行時在工作管理員中會出現cmd.exe
所以每個BAT後面就附帶一個
tasklist |find "cmd.exe"
if %errorlevel% EQU 1 for /l %%i in (1,1,10000) do echo ^G & timeout 1

(註一: 那個^G 要按ALT+7這樣按出來)
(註二: 有找到cmd.exe時%errorlevel%是0,沒找到是1)
不過如果剛好有其他CMD.exe在執行中的話就破功了XD
小成 iT邦高手 10 級 ‧ 2011-12-14 14:07:30 檢舉
阿~不對~這樣不對= =~因為本身在執行的時候就已經有cmd.exe了
所以永遠會存在cmd.exe

那不然加個檢查檔? 執行完畢就刪除
刪到沒有就出聲音
這樣不知道行不行...
小成 iT邦高手 10 級 ‧ 2011-12-14 14:18:36 檢舉
開頭就先產生一個檔
執行完畢就刪除
刪除以後就檢查20個檔案中是否有其中一個還存在,如果都不存在就開始出聲音?
...........好土法煉鋼喔XD
小成 iT邦高手 10 級 ‧ 2011-12-14 14:19:12 檢舉
話說糖叔怎麼不開個新題目?
也好,有點過期了><
esyc提到:
刪除以後就檢查20個檔案中是否有其中一個還存在,如果都不存在就開始出聲音?

這個想法好,但是:如果20個磁碟機代號當中,有一個,其實是這個檔案還沒進去,而不是刪除...
小成 iT邦高手 10 級 ‧ 2011-12-14 18:58:15 檢舉
既然開始討論了~繼續也可以啦XD
只是開新主題或許會有更多人看到可以提供意見

檔案還沒進去是甚麼意思?
批次執行時間不同嗎?
或是每天半夜12點一開始就先產生20個檔案
而不是單一批次開始產生單一檔
然後執行完就刪一個
刪完就出聲

不過有其中一個執行失敗沒刪到檔案,怎麼辦?

2 個回答

6
aesop
iT邦研究生 4 級 ‧ 2011-04-25 09:40:26
最佳解答

我提供一個可以辨識不同設備的方法
假設您有2個設備
分別是5gb 10gb
您可以在5gb隨身碟的根目錄下放一個5gb.txt空檔案
然後
您可以在10gb隨身碟的根目錄下放一個10gb.txt空檔案
然後以此類推
再來用以下 batch 語法
FOR %%d IN (D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) DO IF EXIST %%d:\5gb.txt set 5GB=%%d:
FOR %%d IN (D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) DO IF EXIST %%d:\10gb.txt set 10GB=%%d:
....以此累推

上面語法是說
從磁碟機 D-到-Z
如果說在 J 磁碟機根目錄找到一個 5gb.txt 的檔案 就把5gb這個變數設定為 j:
如果說在 H 磁碟機根目錄找到一個 10gb.txt 的檔案 就把10gb這個變數設定為 H:
然後就可以試用這些變數了
例如
copy D:\back.txt %5GB%\back\
copy E:\back.txt %10GB%\back\

如果還不清楚再舉一個例子

我有2個隨身硬碟
一個是要備份mis的檔案
另一個要備份acc的檔案

我在要備份mis的檔案的隨身硬碟中放一個mis.txt的檔案以供識別(空檔即可不需有內容)
我在要備份acc的檔案的隨身硬碟中放一個acc.txt的檔案以供識別(空檔即可不需有內容)

FOR %%d IN (D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) DO IF EXIST %%d:\mis.txt set mis=%%d:
FOR %%d IN (D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) DO IF EXIST %%d:\acc.txt set acc=%%d:

我要把D:\MIS\BACKUP\ 裡所有檔案copy到 mis這個隨身碟
我要把D:\ACC\BACKUP\ 裡所有檔案copy到 acc這個隨身碟

copy D:\MIS\BACKUP\*.* %MIS%\ /Y
copy D:\ACC\BACKUP\*.* %ACC%\ /Y

很感謝回答,可是,我的設備並不是『固定常用的磁碟』
因此不能『事先擺檔案進去』

我的結果:
1.經過個人多日實測,磁碟代號還是會亂跳,只是,如果指定過,代號『比較不會』亂跳
2.我做不到自動判斷,只能手動,看有哪些磁碟代號,執行相對應的批次檔

這不是解答,只是我想要結案另起爐灶,因此選擇最多人推薦的回答。

4
darkeryu
iT邦新手 1 級 ‧ 2011-04-27 23:15:26

Hi, 抱歉誤會您的意思了您可以這樣寫,

excludeDrive = "A:C:"
sourceDrive = "C:"
sourceFD = "AAA"
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk")

For each objDisk in colDisks

Set fs = CreateObject("Scripting.filesystemobject")
If instr(1,excludeDrive, UCase(objDisk.Name))<0 Then
fs.CopyFolder sourceDrive & "\" & sourceFD,objDisk.Name &"\" & sourceFD, false
end if
Next
WScript.Echo "複製完成!!!"

=====

我要發表回答

立即登入回答