我想用批次檔寫一個自動更新
ex.
判斷 c:\a.exe 的檔案日期 與 \192.168.1.2\test\a.exe 檔案日期
如果 \192.168.1.2\test\a.exe 檔案日期較新 就將檔案copy c:\ 並覆蓋
如何時間一樣 則不執行
或者有什麼好的方法可以做到
我覺得 可以不用 去判斷 檔案是否比較新
直接用 robocopy, 如果 來源與目的擋案一樣,自動會忽略.
robocopy \192.168.1.2\test\a.exe c:\a.exe
這樣就好了 ..
單純用DOS指令應該很難,建議使用 vbscript,可在 dos 下執行,如下,或設成批次檔。
cscript <vbs檔名>
1.建議參考 https://stackoverflow.com/questions/2973136/download-a-file-with-vbs
將檔案下載下來,放到 tmp 目錄
2. 參考 https://stackoverflow.com/questions/2832602/vbscript-compare-and-copy-files-from-folder-if-newer-than-destination-files
比較 tmp 目錄的檔案與目前的檔案,較新則覆蓋
@echo off
xcopy/Y/D c:\a.exe \192.168.1.2\test
pause
指令說明
@echo off 跟pause應該不用說明吧XD (有需要我再說明)
最主要的是xcopy/Y/D c:\a.exe \192.168.1.2\test\這一段
xcopy是windows內建的指令,
參數Y:不要提示您確認是否要覆蓋一個已經存在的檔案。
參數D:複製在指定日期當天或之後發生變更的檔案。如果沒有給日期,只複製那些來源檔案日期比目的檔案日期為新的檔案。(因為這邊沒有特別設定日期,所以只有當c:\a.exe的日期比目的地新的時候,才會複製過去)
請參考嚕~~
提問技巧滿重要的,原來不止只是COPY到的問題.
請參考
@Echo Off
Set S=來源路徑含檔名及副檔名
Set D=目地路徑含檔名及副檔名
Set Runing=檔名及副檔名
FC %S% %D% >Nul
If ERRORLEVEL 1 TaskKill /F /IM "%Runing%"&Copy /Y "%S%" "%D%"&Start "啟動程式" "%D%"
這個執行效率不如 forfiles ,如果檔案較大可以用二個forfiles抓出日期比對
echo.
echo ............................................
echo 關閉程式....
taskkill.exe /F /IM a.exe
echo ............................................
echo 連線更新目錄
net use "\192.168.1.2\test" "密碼" /user:"帳號"
echo.
echo.
echo ...........................................
echo 正在複製程式系統更新,請稍後.....
xcopy "\192.168.1.2\test*.exe" "C:*.exe" /d /y /z /C /Q
echo 網路磁碟\離線
rem net use /delete "\192.168.1.2\test" /Y