Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] проверка версии и скачивание более нового апдейта (http://forum.oszone.net/showthread.php?t=197461)

hant 24-01-2011 07:06 1595877

проверка версии и скачивание более нового апдейта
 
есть сетевая папка 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 1596064

как-то так:
Код:

@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 1596326

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

amel27 25-01-2011 06:54 1596607

Цитата:

Цитата hant
хотелось бы реализовать так чтобы только один файл который выше версией »

Код:

@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 1596741

Огромное спасибо!!! весьма признателен Вам за Вашу помошь!
Все работает!


Время: 00:30.

Время: 00:30.
© OSzone.net 2001-