Автоматическое скачивание AVPTool по расписанию, теперь под Windows

kaspersky

Вот наконец я и сподобился, и адаптировал свои старые линуксовые наработки по скачиванию последних версий Cureit и AVPTool. В Windows все оказалось чутко уродливее )) , но мои любимые GNUшные утилиты помогли мне. Еще непонятный момент, почему такая конструкция:

set var=curl http://devbuilds.kaspersky-labs.com/devbuilds/AVPTool/index.js | find "KAT-RU" | gawk -F\" "{print $4}"

работает в Windows server 2003 и не работает под Windows 7. Если кто знает почему, отпишитесь плиз.

В общем, вот:

@Echo Off

:: Задаем куда скачать и как обозвать файл после скачки.
SET K="D:\av\AVPTool.exe"
SET D="D:\av\CureIt.exe"

:: Заполняем переменную урлом до актуальной версии AVPTool.

:: Вызываем батник и записываем получившуюся строку в файл 1.txt (я до победного не верил, что в винде нельзя заполнить переменную просты конвейером)
CALL var.bat  > 1.txt

:: Читаем файл 1.txt в переменную и удаляем более ненужный файл.
SET /p var=< 1.txt
DEL del /Q 1.txt

:: Скачиваем AVPTool подставляя в виде переменных путь откуда и куда качать.
curl --retry 5 --retry-delay 10 --trace-time --output %K% %var%

:: Скачиваем CureIt  подставляя в виде переменных путь откуда и куда
curl --retry 5 --retry-delay 10 --trace-time --output %D% http://ftp.drweb.com/pub/drweb/cureit/launch.exe

Содержимое батника var.bat:

@echo off
curl  http://devbuilds.kaspersky-labs.com/devbuilds/AVPTool/index.js | find "KAT-RU" | gawk -F\" "{print $4}"

Опять же, для абстрагирования от системы, все необходимое (curl.exe, gawk.exe, libcurl.dll, libeay32.dll, libssl32.dll, ssleay32.dll) находится в папке со скриптом, скачать можно тут.

Изменения от 5.05.2013

Прошло время и я снова вернулся к проблеме автоматического скачивания AVPTool и Cureit под Windows. И хочу предст вить вашему вниманию слегка изменённый код, который выложил в комментариях Vlad.

@Echo Off

:: Задаем куда скачать и как обозвать файл после скачки.
SET K="C:\1\AVPTool.exe"

:: Заполняем переменную урлом до актуальной версии AVPTool и удаляем временный файл.

curl http://devbuilds.kaspersky-labs.com/devbuilds/AVPTool/index.txt | find "RU ">1.txt
FOR /F "tokens=3 delims= " %%A IN (1.txt) DO set U=%%A
DEL del /Q 1.txt

:: Скачиваем AVPTool подставляя в виде переменных путь откуда и куда качать.
curl --retry 5 --retry-delay 10 --trace-time --output %K% %U%

Можно пропустить один шаг с присвоением переменной %U% и сразу приступить к скачиванию в цикле сделав так:

FOR /F "tokens=3 delims= " %%A IN (1.txt) DO (curl --retry 5 --retry-delay 10 --trace-time --output %K% %%A)

Получившийся код более элегантен и прост, нежили мой первичный вариант. Так же он не нуждается в gawk и обходится без var.bat.

Изменения от 6.08.2013

Оказалось Windows не такой убогий и поддерживает конвейеры в циклах, в связи с этим новая версия скрипта, теперь без создания промежуточных файлов.

@Echo Off

:: Задаем куда скачать и как обозвать файл после скачки.
SET K="C:\1\AVPTool.exe"

:: Заполняем переменную урлом до актуальной версии AVPTool.
FOR /F "tokens=3 delims= " %%A IN ('curl http://devbuilds.kaspersky-labs.com/devbuilds/AVPTool/index.txt ^| findstr "RU"') DO (curl --retry 5 --retry-delay 10 --trace-time --output %K% %%A)

Спасибо всем кто откликнулся в комментариях, ваши идеи бесценны.

Смотрите так же:

Автоматическое скачивание AVPTool по расписанию, теперь под Windows: 19 комментариев

  1. У меня вот такое поделие (для линукса с кронтабом):

    find /home/user/kasperski -type f -mtime +0 -name «setup*» -exec rm -f {} \;
    cd /home/user/kasperski
    wget http://rescuedisk.kaspersky-labs.com/rescuedisk/updatable/kav_rescue_10.iso -N
    wget http://devbuilds.kaspersky-labs.com/devbuilds/AVPTool/avptool11/ -r -l 1 -np -nd -N -A.exe -erobots=off

    1. Задача то не просто скачать абы какой AVPTool, а скачать только нужный, т.е. последней версии. Выкачивать всю пачку это не дело.

  2. Позволю себе немного причёсанный код Антона

    set target=d:\HOT_folder
    wget http://devbuilds.kaspersky-labs.com/devbuilds/AVPTool/index.txt
    FindStr /IC:»RU» index.txt > avp.tmp
    del index.txt
    For /F «Tokens=6 Delims=/» %%i In (avp.tmp) do (
    wget http://devbuilds.kaspersky-labs.com/devbuilds/AVPTool/avptool11/%%i -P %target%
    if %errorlevel% EQU 0 (
    del avp.tmp
    cd /D %target%
    del AVPTool.exe
    ren setup_*.exe AVPTool.exe
    )
    )

    PS парсер может заменить обычные кавычки на »

    1. Вот это уже отличный код, коротко, просто.

      Если вы не против, добавлю его в статью, указав ваше авторство и свои комментарии к происходящему.

      Но вот чего я все же не пойму, чем вам всем курл не нравится? )))
      Я вот тут на днях подумал, а не сделать ли чисто курловый запрос к сайту каспера, что бы курл заполнил все поля и нажал на кнопку скачки, тоже ИМХО интересный вариант, и главное кросплатформенный без изменений.

    1. Загрузка файла по кускам, как Download Master от Westbyte Software :)
      Это было бы прелестно =)

      1. Качать в несколько потоков можно только то, что отдается в несколько потоков, от загрузки цельного большого файла в несколько потоков, скорость не увеличится, это даже теоретически обессмыслено. А так да, у курла есть закачка в несколько потоков.

  3. Похоже где то ошибка в пути, путь должен быть указан в заранее существующий каталог, сам он каталоги не создаст. Или может прав не хватает на запись?

    1. Да, действительно… Спасибо, указал существующий каталог и всё скачалось.
      Однако из-за наличия юниксовых утилит данное решение кажется слегка экзотическим и красивым одновременно ;)

      А curl умеет качать в несколько потоков?

  4. Вы закомментируйте @Echo Off, и поставьте в конце pause, будет хоть видно в каком месте затык.

    И вопрос на внимательность, вы изменили места скачки на свои? ))

    1. Так точно, установлено:

      SET K=»%cd%\1\AVPTool.exe»
      SET D=»%cd%\1\CureIt.exe»

      Имеется:
      Warning: Failed to create the file
      Warning: D:\Users\Profile\Desktop\avd\avd\1\CureIt.exe
      0 107M 0 3236 0 0 1920 0 16:15:48 0:00:01 16:15:47 5768
      curl: (23) Failed writing body (0 != 3236)

  5. Писалось это дело под win 7, проверялось на xp и 2003, win 8 я даже в глаза не видел, что хоть за ошибка то? А то для этого 3х сточного батника, «не удалось запустить», как то сильно лестно.

    А если прост в консоле запустить курл, он запускается? На библиотеки не ругается? (хотя это последняя версия).

    1. Заранее прощу прощения за неясность мысли.

      Что происходит:
      1. Запускаю AVD.bat
      2. Появляется окно командной строки, в котором мелькает curl.
      3. Через 5 секунд окно командной строки закрывается, никаких загрузок не происходит.

  6. И вот авторский вариант под wget, разработанный на основе Вашего поста =)

    wget —proxy=%use_http% —no-cache —proxy-user=%http_login% —proxy-passwd=%http_password% —execute=»http_proxy=%http_address%:%http_port%» http://devbuilds.kaspersky-labs.com/devbuilds/AVPTool/index.txt
    FindStr /IC:»RU» index.txt >> avp.tmp
    del index.txt
    For /F «Tokens=6 Delims=/» %%i In (avp.tmp) do (
    wget —proxy=%use_http% —no-cache —proxy-user=%http_login% —proxy-passwd=%http_password% —execute=»http_proxy=%http_address%:%http_port%» http://devbuilds.kaspersky-labs.com/devbuilds/AVPTool/avptool11/%%i -P downloads/avptool11
    )
    del avp.tmp

      1. Пока его не пробовал)
        Данный скрипт запустить не удалось, после запуска батника помелькал curl и всё закрылось((
        ОС Windows 8.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.