Войти

Показать полную графическую версию : [решено] проверка версии и скачивание более нового апдейта


hant
24-01-2011, 07:06
есть сетевая папка update там находяться самораспаковывающиеся архивы:
update1.0.1, update1.0.2, update1.0.3, update1.0.4.
есть программа, в корневом каталоге проги папка version, там файл version.inf содержание которого всего одна строка Version=1.0.2 содержимое которой будет меняться взависимости какой патч установлен.
подскажите как реализовать скачивание только архива который выше версией указаной в version.inf.
т.е. update1.0.3, затем если нет архива выше версии то вывести сообщение что обновлений нет.

amel27
24-01-2011, 12:46
как-то так:
@echo off
SETLOCAL EnableDelayedExpansion

set "MyProgPath=c:\Program Files\My Program"
set "RemotePath=\\MyServer\Share"

for /f "usebackq tokens=2-4 delims==. " %%a in ("%MyProgPath%\version.inf") do (
set "$b=0%%b"& set "$c=0%%c"& set "$v=%%a!$b:~-2!!$c:~-2!"
)
for /f "tokens=1-3 delims=update." %%a in ('dir /b/a-d "%RemotePath%\update*.exe"') do (
set "$b=0%%b"& set "$c=0%%c"& set "$n=%%a!$b:~-2!!$c:~-2!"
if !$n! gtr !$v! copy /b/y/v/z "%RemotePath%\update%%a.%%b.%%c.exe" "%MyProgPath%\"
)

hant
24-01-2011, 18:09
Спасибо! работает, но скачивает все файлы выше версией, а хотелось бы реализовать так чтобы только один файл который выше версией.
т.е. версия проги 1.0.2 , и надо скачать файл update1.0.3
если не трудно подскажите что подправить в коде надо.
заранее благодарю!

amel27
25-01-2011, 06:54
хотелось бы реализовать так чтобы только один файл который выше версией »
@echo off
SETLOCAL EnableDelayedExpansion

set "MyProgPath=c:\Program Files\My Program"
set "RemotePath=\\MyServer\Share"

for /f "usebackq tokens=2-4 delims==. " %%a in ("%MyProgPath%\version.inf") do (
set "$b=0%%b"& set "$c=0%%c"& set "$v=%%a!$b:~-2!!$c:~-2!"
)& set "$m=999999"& set "$f="
for /f "tokens=1-3 delims=update." %%a in ('dir /b/a-d "%RemotePath%\update*.exe"') do (
set "$b=0%%b"& set "$c=0%%c"& set "$n=%%a!$b:~-2!!$c:~-2!"
if !$n! gtr !$v! if !$n! lss !$m! set "$m=!$n!"& set "$f=update%%a.%%b.%%c.exe"
)
if defined $f copy /b/y/v/z "%RemotePath%\!$f!" "%MyProgPath%\"

hant
25-01-2011, 11:42
Огромное спасибо!!! весьма признателен Вам за Вашу помошь!
Все работает!




© OSzone.net 2001-2012