iT邦幫忙

0

批次檔的自動更新

  • 分享至 

  • xImage

各位大大好 小弟我剛接觸到批次檔,目前架構是想用網路磁碟機來更新Client的檔案版本。(透過批次檔自動更新)

目前SERVER端的共用資料夾裡面總共有3個安裝檔,分別是abc1.1、abc1.2、abc1.3,後面的數字代表version。
我使用過xcopy來做,雖然server的資料內容可以複製到Client端的資料夾
但我想的是抓取SERVER上版本比Client端的版本高的Version。

EX:Client資料夾裡面有abc1.2 用批次檔讓Server端abc1.3的資料夾下載到本機
(abc1.1不動)

chuway iT邦新手 2 級 ‧ 2020-09-02 23:33:58 檢舉
如果沒有需版本控制,只要Server/Client時間正確,用 「xcopy /s/q/d 來源 目的」就可以把新的檔案複製過去,詳細請看xcopy /?
adek5327 iT邦新手 5 級 ‧ 2020-09-03 09:26:33 檢舉
XCOPY的用法我之前有試過,目前想試試看透過比較檔名來做auto update
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
slime
iT邦大師 1 級 ‧ 2020-09-03 11:00:51
最佳解答

批次檔部分略過....

先來考慮如何精確控制版本, 分為兩件事:

  1. abc1.1, abc1.2, abc1.3 是否一定要完整複製到 client , 如果要, 只要執行 xcopy / robocopy 附參數就可以自動比對檔案是否存在, 不存在才複製.
  2. 實際使用時, Client 要如何選擇用 abc 哪一個版本?

所以建議用"版本控制"去考慮與找合適的應用方案, 條件考慮好了, 再規劃流程符合需求, 再選擇批次檔要執行的程式與參數.

看更多先前的回應...收起先前的回應...
adek5327 iT邦新手 5 級 ‧ 2020-09-03 14:18:20 檢舉

前輩您好
1.只抓取最新的version複製到client端,但是Server端需存放每個版本的version
2.client端要用最新版 我還有另外寫auto install讓使用者直接使用安裝好的程式

slime iT邦大師 1 級 ‧ 2020-09-03 19:58:37 檢舉

乍看之下需要:

  1. Server Archive 區
  2. Server Active 區
  3. Client Download Temp ( 未安裝 )
  4. Client 執行區.

所以需要的判斷就大約是:

  1. 定期或開機時, Client 向 Server 詢問目前最新版本, 例如可以用 Version.txt 檔案紀錄, 只要 Version.txt 與 Server 不同, 就開始下載.
  2. Client 比對下載是否完成, 例如: 檔案大小或 md5 hash 比對, 若檔案下載完成, 就執行 auto install .
adek5327 iT邦新手 5 級 ‧ 2020-09-03 22:29:52 檢舉

感謝回復
1.想請問比較Version.txt具體應該怎麼去做呢?當初自己的想法是透過Folder的版本名稱不同去動作,但是沒有辦法去比較檔案名稱的數字大小。下載的部分我應該會直接使用xcopy來做
2.了解

slime iT邦大師 1 級 ‧ 2020-09-04 08:14:04 檢舉

參考:

Server檔案:
\Server\Software\ABC\NOW\Version.txt
\Server\Software\ABC\Archive\1.2\Version.txt
\Server\Software\ABC\Archive\1.3\Version.txt

Client檔案:
\Client\D$\ABC\NOW\Version.txt

批次檔比對, 若版本不同, 將 Client 端移動檔案與複製新版本檔案(語法依環境不同, 務必測試過再執行):
( fc \Server\Software\ABC\NOW\Version.txt \Client\D$\ABC\NOW\Version.txt )
|| ( ( rd /s /q \Client\D$\ABC\PRE ) && ( move \Client\D$\ABC\NOW \Client\D$\ABC\PRE ) && ( robocopy /s \Server\Software\ABC\NOW \Client\D$\ABC\NOW ) && ( if exists \Client\D$\ABC\NOW\install.exe \Client\D$\ABC\NOW\install.exe ) )

adek5327 iT邦新手 5 級 ‧ 2020-09-04 15:10:49 檢舉

想請問一下FC的部分 FC只能比較出來兩個檔案 要如何去判定新舊呢

slime iT邦大師 1 級 ‧ 2020-09-04 18:16:40 檢舉

如果主機上都會確定是最新版, 何必在意新舊呢?
只要 Client 版本不同就是舊版.

adek5327 iT邦新手 5 級 ‧ 2020-09-09 08:29:59 檢舉

感謝前輩幫忙

3
richardsuma
iT邦大師 1 級 ‧ 2020-09-03 00:13:20

增量備份:
robocopy server:\ client:\ /xo

差異備份:
robocopy server:\ client:\ /e /xo /purge

看更多先前的回應...收起先前的回應...
adek5327 iT邦新手 5 級 ‧ 2020-09-03 11:16:06 檢舉

前輩您好 因為/XO是針對相同檔名去做,不過我這目前的問題是
資料夾名稱本身就含有version "EX:abc_1.1"打開來才是ABC 1.1版的安裝檔, 是否有辦法針對檔名的數字去做比較呢?

因為你的問題讓我覺得:你的client端現有存在 ABC1.1 及 ABC1.2版本,而Server端有一個新的ABC1.3版本,所以Client端只要copy ABC1.3版本的檔案,那就copy 最新的版本就可以。
是我理解錯誤嗎?

還是你的要求是Client要刪掉ABC1.1與ABC1.2版,copy ABC1.3版?

另外一個方式,就是使用同樣的檔案名稱"EX:abc",依檔案最新日期更新也是可行。

adek5327 iT邦新手 5 級 ‧ 2020-09-03 22:22:57 檢舉

感謝回復
因為系統的關係,不能使用日期做比對。所以當初的想法是使用FOLDER名稱來做比較。
詳細流程就跟樓下大大說的一樣:『定期或開機時, Client 向 Server 詢問目前最新版本,只要Client端的Version與Server最新的不同, 就開始更新』。且只抓取最新版,Client端不應有其它版本

0
zero
iT邦好手 1 級 ‧ 2020-09-04 15:50:48

去用Powershell去解吧,查詢=>比對=>複製=>更新

你的需求離不開這四個步驟,上面那篇也是一樣執行這四個步驟

powershell支援的指令更多,也比較容易閱讀。


你現在最大的問題應該是比對吧

1.比對日期--比對建立時間--比對修改時間
2.比對檔名
3.比對資料夾名稱

方法其實很多,我也可以直接忽視上面的規則,
4.讀取文字檔取得版本編號

建立一個Version.txt的文字檔

固定讀取Version.txt,在複製檔案到Client端,開始更新

以後更新檔案就是在Server上放新檔案,並且修改Version.txt的內容

看更多先前的回應...收起先前的回應...
adek5327 iT邦新手 5 級 ‧ 2020-09-04 16:11:38 檢舉

前輩您好
目前我已經取得版本編號了,不過不知道該如何比較新舊,因為version前面還會有檔案名稱。我的做法是用DIR將存有版本的資料夾名稱儲存成TXT打算以這種方式去比對

zero iT邦好手 1 級 ‧ 2020-09-04 17:32:09 檢舉

你的版本編號,不是數字越大的就是越新嗎? 1.1>1.2>1.3 不是這樣增加上去的?

zero iT邦好手 1 級 ‧ 2020-09-04 17:34:25 檢舉

還是你不知道怎麼比對? 1.2比1.1新 程式不會寫?

adek5327 iT邦新手 5 級 ‧ 2020-09-04 17:41:58 檢舉

對的 我不太清楚要怎麼寫

蟹老闆 iT邦大師 1 級 ‧ 2020-09-07 18:55:55 檢舉

請參考

@Echo Off
Set ReleasePath=\\HostName\NewVer
Set TargetPath=d:\test\test
For /f %%i In ('Dir "%ReleasePath%\abc??.?" /o-n-es /a-d /b') Do (
    If Not Exist "%TargetPath%\%%i" Echo Xcopy /Y "%%~fi" "%TargetPath%\%%i"
    Goto EOF
)
pause

這個批次檔只會檢查指定路徑且為abc??.?的檔案,需注意的是??.?可以是任意字,從大到小排序只抓取第最大值,版本號可從00.0~ZZ.Z或更多。
ReleasePath 是最新版本的來源位置,不要加
TargetPath 是使用中版本的位置,不要加\

adek5327 iT邦新手 5 級 ‧ 2020-09-09 08:30:26 檢舉

感謝前輩的幫忙

我要發表回答

立即登入回答