各位大大好 小弟我剛接觸到批次檔,目前架構是想用網路磁碟機來更新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不動)
批次檔部分略過....
先來考慮如何精確控制版本, 分為兩件事:
所以建議用"版本控制"去考慮與找合適的應用方案, 條件考慮好了, 再規劃流程符合需求, 再選擇批次檔要執行的程式與參數.
前輩您好
1.只抓取最新的version複製到client端,但是Server端需存放每個版本的version
2.client端要用最新版 我還有另外寫auto install讓使用者直接使用安裝好的程式
乍看之下需要:
所以需要的判斷就大約是:
感謝回復
1.想請問比較Version.txt具體應該怎麼去做呢?當初自己的想法是透過Folder的版本名稱不同去動作,但是沒有辦法去比較檔案名稱的數字大小。下載的部分我應該會直接使用xcopy來做
2.了解
參考:
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 ) )
增量備份:
robocopy server:\ client:\ /xo
差異備份:
robocopy server:\ client:\ /e /xo /purge
因為你的問題讓我覺得:你的client端現有存在 ABC1.1 及 ABC1.2版本,而Server端有一個新的ABC1.3版本,所以Client端只要copy ABC1.3版本的檔案,那就copy 最新的版本就可以。
是我理解錯誤嗎?
還是你的要求是Client要刪掉ABC1.1與ABC1.2版,copy ABC1.3版?
另外一個方式,就是使用同樣的檔案名稱"EX:abc",依檔案最新日期更新也是可行。
感謝回復
因為系統的關係,不能使用日期做比對。所以當初的想法是使用FOLDER名稱來做比較。
詳細流程就跟樓下大大說的一樣:『定期或開機時, Client 向 Server 詢問目前最新版本,只要Client端的Version與Server最新的不同, 就開始更新』。且只抓取最新版,Client端不應有其它版本
去用Powershell去解吧,查詢=>比對=>複製=>更新
你的需求離不開這四個步驟,上面那篇也是一樣執行這四個步驟
powershell支援的指令更多,也比較容易閱讀。
你現在最大的問題應該是比對吧
1.比對日期--比對建立時間--比對修改時間
2.比對檔名
3.比對資料夾名稱
方法其實很多,我也可以直接忽視上面的規則,
4.讀取文字檔取得版本編號
建立一個Version.txt的文字檔
固定讀取Version.txt,在複製檔案到Client端,開始更新
以後更新檔案就是在Server上放新檔案,並且修改Version.txt的內容
前輩您好
目前我已經取得版本編號了,不過不知道該如何比較新舊,因為version前面還會有檔案名稱。我的做法是用DIR將存有版本的資料夾名稱儲存成TXT打算以這種方式去比對
你的版本編號,不是數字越大的就是越新嗎? 1.1>1.2>1.3 不是這樣增加上去的?
還是你不知道怎麼比對? 1.2比1.1新 程式不會寫?
對的 我不太清楚要怎麼寫
請參考
@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 是使用中版本的位置,不要加\
感謝前輩的幫忙