[Цитировать]

    wadimus
  • 14910
  • Стаж: 8 лет
  • Сообщений: 749
  • Репутация:91

    [+] [-]
Привет, а дату можно узнать?
млин .. работаю .. тестирую
список большой, более 250 ячеек .. тестирование успешно, если появилась новая версия и она успешно скачалась.
вот для затравки KFA (тема поднималась на ру-борде, там даже бат-файл есть .. у меня попроще)
@echo off
CD /d "%~dp0"
SetLocal EnableExtensions EnableDelayedExpansion
set "h1=http://dm.kaspersky-labs.com/ru-RU/KFA/17.0.0.611"
set "h2=http://dm.kaspersky-labs.com/bases/kavkis2017/KFA"
set "ver=17.0.0.611"
echo !> "%~dp0name0.txt"
("%~dp0..\Scripts\wget.exe" -q -O- "%h1%" | findstr /R /C:"href=") >"%~dp0down.txt"
for %%a in ("%~dp0down.txt") do set size=%%~za
if %size%==0 goto 1
<"%~dp0down.txt" (for /f "tokens=1* delims=[]" %%a in ('find /n /v ""') do ( set "s%%a=%%b" & call :m %h1% "%%b" ))
("%~dp0..\Scripts\wget.exe" -q -O- "%h2%" | findstr /R /C:"href=") >"%~dp0down.txt"
<"%~dp0down.txt" (for /f "tokens=1* delims=[]" %%a in ('find /n /v ""') do ( set "s%%a=%%b" & call :m %h2% "%%b" ))
echo %ver%> "%~dp0version.txt"
echo %date%> "%~dp0date.txt"
echo 0> "%~dp0name0.txt"
:1
del "%~dp0down.txt"
Exit /B
:m
FOR /F "tokens=3 delims=<>" %%i in ("%~2") do set f=%%i
"%~dp0..\Scripts\wget.exe" -N --waitretry=5 -t5 -T15 "%~1/%f%" -O "%~dp0Setup\%f%"
Exit /B
заодно продумал защиту инсталлятора от внезапного прекращения обновления ..
всё будет
af

[Цитировать]

    LcHNextGen
  • 16745
  • Стаж: 7 лет 3 месяца
  • Сообщений: 3
  • Репутация:0

    [+] [-]
wadimus, создал батник, код которого присылал в письме, протестировал. Не качает необходимые файлы для установки:
corebases.cab
corebasesx64.cab
corebasesx86.cab
inst.cab
kleaner.cab
productbases.cab
sharedbases.cab
Не подхватывает расположение файлов из листов:
http://dm.kaspersky-labs.com/ru-RU/KFA/17.0.0.611/x64/
http://dm.kaspersky-labs.com/ru-RU/KFA/17.0.0.611/x86/
Он их закачивает, вместо того, чтобы взять из них ссылки на файлы.

[Цитировать]

    wadimus
  • 14910
  • Стаж: 8 лет
  • Сообщений: 749
  • Репутация:91

    [+] [-]
LcHNextGen, погляди, это второй заход:
set "h2=http://dm.kaspersky-labs.com/bases/kavkis2017/KFA"
...
("%~dp0..\Scripts\wget.exe" -q -O- "%h2%" | findstr /R /C:"href=") >"%~dp0down.txt"
<"%~dp0down.txt" (for /f "tokens=1* delims=[]" %%a in ('find /n /v ""') do ( set "s%%a=%%b" & call :m %h2% "%%b" ))
как раз и качаются свежие базы
файлы x64 и x86 тоже закачиваются .. мне не понятно, в них есть ссылки такие:
/common/dotNetFx40_Client_x86_x64.exe  43000680  1CF262F35322D6C9C7A27FCA513FC269
/bases/kavkis2017/KFA/index-bases-x86.txt
/sharedbases/kavkis2017/index-sharedbases.txt
/kleaner/Interactive2017/Global/index-kleaner.txt
их тоже надо закачивать? как? откуда ссылки?
сейчас в подпапке Setup (её надо создать внутри ячейки!) после скачивания 25 файлов (оффлайн инсталлятор + свежие базы) .. какие еще нужны файлы?
в твоей раздаче на бабочке по сравнению с моими есть 2 файла: kleaner.cab и sharedbases.cab .. откуда они? их нет в офф-ссылках ..

[Цитировать]

    LcHNextGen
  • 16745
  • Стаж: 7 лет 3 месяца
  • Сообщений: 3
  • Репутация:0

    [+] [-]
wadimus, wget это умеет, берет ссылки из списка в листе.
sharedbases.dll берет по списку вот от сюда http://dm.kaspersky-labs.com/sharedbases/kavkis2017/
Из родительского каталога, если самому пролазить как и куда он лезет за файлами становится всё ясно.
Единственно он не качает /common/dotNetFx40_Client_x86_x64.exe
http://dm.kaspersky-labs.com/common/
Хотя должен быть, как я понимаю, устанавливается данный компонент, у кого отсутствует NET Framework 4
Хотя и не обязателен, сейчас он почти у всех стоит.

[Цитировать]

    wadimus
  • 14910
  • Стаж: 8 лет
  • Сообщений: 749
  • Репутация:91

    [+] [-]
LcHNextGen,
sharedbases.cab есть в http://dm.kaspersky-labs.com/sharedbases/ и в каждом из подкаталогов .. нужный в корне?
dotNetFx40_Client_x86_x64.exe - тяжелый .. он нужен? или можно занулить его? а в условиях установки KFA поставить: предварительно установите дот-нет версии 4 .. так?
ссылки из списка в листах уже есть и скачались ..
остался файл kleaner.cab .. он откуда?

[Цитировать]

    LcHNextGen
  • 16745
  • Стаж: 7 лет 3 месяца
  • Сообщений: 3
  • Репутация:0

    [+] [-]
44331dotNetFx40_Client_x86_x64.exe - тяжелый .. он нужен?
Нет, установят сами.
44331sharedbases.cab есть в http://dm.kaspersky-labs.com/sharedbases/ и в каждом из подкаталогов .. нужный в корне?
http://dm.kaspersky-labs.com/sharedbases/kavkis2017/
44331остался файл kleaner.cab .. он откуда?
http://dm.kaspersky-labs.com/kleaner/Interactive2017/Global/

[Цитировать]

    wadimus
  • 14910
  • Стаж: 8 лет
  • Сообщений: 749
  • Репутация:91

    [+] [-]
окончательный вариант с комментами:
@echo off
CD /d "%~dp0"
SetLocal EnableExtensions EnableDelayedExpansion
echo ... KFA
:: список ссылок, откуда будет собираться офф-лайновый инсталлятор
set "h1=http://dm.kaspersky-labs.com/ru-RU/KFA/17.0.0.611"
set "h2=http://dm.kaspersky-labs.com/bases/kavkis2017/KFA"
set "h3=http://dm.kaspersky-labs.com/sharedbases/kavkis2017"
set "h4=http://dm.kaspersky-labs.com/kleaner/Interactive2017/Global"
:: и их количество
set /a num=4
:: версия, наверное лишняя тут, но пусть будет :)
set "ver=17.0.0.611"
:: путь, куда будут скачиваться файлы .. относительно текущего каталога
:: знак \ в конце не указываем для лучшей визуальности
:: нужный каталог создать заранее!!
:: и желательно (но необязательно) его очистить
set "w=Setup"
:: если скачиваем в текущий каталог (а это нежелательно!), то
:: set "w=."
:: для каждой ссылки скачивается листинг файлов в рабочий файл down.txt
:: где каждая строка - это ссылка на файл и техническая информация об нём
:: далее эта строка передается в подпрограмму, которая и скачивает файл
:: первый цЫкл по всем ссылкам и второй внутренний цЫкл по всем строкам (которые содержат нужные файлы)
For /L %%i IN (1,1,%num%) DO (
("%~dp0..\Scripts\wget.exe" -q -O- "!h%%i!" | findstr /R /C:"href=") >"%~dp0down.txt"
<"%~dp0down.txt" (for /f "tokens=1* delims=[]" %%a in ('find /n /v ""') do ( set "s%%a=%%b" & call :m !h%%i! "%%b" ))
)
:: лишние файлы убираем
del "%~dp0down.txt"
:: и записываем в файл date.txt текущую дату
echo %date%> "%~dp0date.txt"
Exit /B
:: подпрограмма, в неё передаются два аргумента: ссылка и текстовая строка, содержащая ссылку на файл
:: из строки выделяется имя файла, и он скачивается по переданной ссылке
:m
FOR /F "tokens=3 delims=<>" %%i in ("%~2") do set f=%%i
"%~dp0..\Scripts\wget.exe" -N --waitretry=5 -t5 -T15 "%~1/%f%" -O "%~dp0%w%\%f%"
Exit /B
на сегодня число скачанных файлов 29 штуков общим весом 214.544.191 (мерял в любимом FAR-е)

[Цитировать]

    wadimus
  • 14910
  • Стаж: 8 лет
  • Сообщений: 749
  • Репутация:91

    [+] [-]
LcHNextGen, проверь ..
если всё ок! могу на ру-борде отписаться .. ибо тамошний оффлайн-загрузчик как учебник по квантовой механике (тёмный лес :) )

[Цитировать]

    bios83
  • 2205
  • Стаж: 8 лет 11 месяцев
  • Сообщений: 101
  • Репутация:16

    [+] [-]
wadimus, Привет. Опять беда AdwCleaner не хочет качаться, не подскажешь свое решение?

[Цитировать]

    wadimus
  • 14910
  • Стаж: 8 лет
  • Сообщений: 749
  • Репутация:91

    [+] [-]
bios83,
https://toolslib.net/downloads/finish/1-adwcleaner/
там ищем строку:
It does not work
и далее ссылка, она типа:
https://toolslib.net/downloads/finish/1-adwcleaner/...W644DGi095GrfWy/
вот полный код с версией
"%~dp0..\Scripts\wget.exe" -N --waitretry=5 -t5 -T15 "https://toolslib.net/downloads/finish/1-adwcleaner/" -O "%~dp0down.txt"
findstr /R /C:"It does not work" "%~dp0down.txt" >"%~dp0down1.txt"
FOR /F "usebackq tokens=2 delims==>" %%a in ("%~dp0down1.txt") do set f=%%a
set f=%f:~1,-1%
"%~dp0..\Scripts\wget.exe" -N --waitretry=5 -t5 -T15 "https://toolslib.net%f%" -O "%~dp0adwcleaner.exe
findstr /R /C:"Thank you for downloading AdwCleaner (" "%~dp0down.txt" >"%~dp0down1.txt"
FOR /F "usebackq tokens=2 delims=()" %%a in ("%~dp0down1.txt") do set f=%%a
echo %f%> "%~dp0version.txt"
del "%~dp0down.txt"
del "%~dp0down1.txt"

[Цитировать]

    bios83
  • 2205
  • Стаж: 8 лет 11 месяцев
  • Сообщений: 101
  • Репутация:16

    [+] [-]
wadimus, Спасибо большое. Я тут немножко по экспериментировал с утилитой http2cli и вот ещё один вариант.
Set scripts=%~dp0
for /F "tokens=2 delims=+++" %%i in ('%scripts%http2cli.exe https://toolslib.net/downloads/finish/1/ 2^|find "It does not work"') do set from=%%i
"%scripts%wget.exe" -N --waitretry=5 -t5 -T15 "https://toolslib.net%from%" -O "%~dp0adwcleaner.exe"

[Цитировать]

    wadimus
  • 14910
  • Стаж: 8 лет
  • Сообщений: 749
  • Репутация:91

    [+] [-]
bios83, ну, или так :)
однако ..
- модульность
- понятность кода (даже если сам или чужой человек поглядит код - всё поймет)
- меньшее использование тернета
- и главное (и иногда самое трудное) - получение версии скачиваемого продукта
поэтому:
- скачиваем офф-страницу (где и ссылки и версия) один раз!
- тут же проверяем результаты на доступность тернета (скачали страницу или получили текстовый файл с поисковым приложение), если результаты скачивания или обработки равны нули - прекращаем всё
- скачиваем дистрибутив не в готовый продукт, а в промежуточный! если его размер равен 0 (нет или тернета или доступности или сами прервали), то оставляем предыдущий дистрибутив.
для получения версии используем уже скачанное, повторное использование тернета недопустимо
пример ..
echo ... Core Temp
:: name0.txt - маркер .. ! - крайнее обновление было с ошибками
:: если там пусто - всё ок!
echo !> "%~dp0name0.txt"
("%~dp0..\Scripts\wget.exe" -q -O- "http://www.alcpu.com/CoreTemp" | findstr /R /C:"Core Temp [0-9]") >"%~dp0down.txt"
:: скачали офф-страницу и её обработали
:: если результат равен нулю (нет тернета) идем нафиг :)
for %%a in ("%~dp0down.txt") do set size=%%~za
if %size%==0 goto 1
:: скачиваем дистрибутив во временные файлы
:: если он равен нулю - идем нафиг
"%~dp0..\Scripts\wget.exe" -N --waitretry=5 -t5 -T15 "http://www.alcpu.com/CoreTemp/Core-Temp-setup.exe" -O "%~dp0Core-Temp-setup.exe.~"
for %%a in ("%~dp0Core-Temp-setup.exe.~") do set size=%%~za
if %size%==0 goto 1
:: что-то скачали
:: переименовываем временный файл в нормальный
del "%~dp0Core-Temp-setup.exe"
ren "%~dp0Core-Temp-setup.exe.~" "Core-Temp-setup.exe"
:: ищем версию и записываем её в файл version.txt
FOR /F "usebackq tokens=2 delims=>:" %%a in ("%~dp0down.txt") do set f=%%a
set f=%f:*p =%
echo %f%> "%~dp0version.txt"
:: пишем дату и зануляем маркер-файл
echo %date%> "%~dp0date.txt"
echo 0> "%~dp0name0.txt"
:1
:: чистим временное
del "%~dp0down.txt"
del "%~dp0*.~" /q

[Цитировать]

    bios83
  • 2205
  • Стаж: 8 лет 11 месяцев
  • Сообщений: 101
  • Репутация:16

    [+] [-]
Подскажи мне пожалуйста а у тебя есть оболочка под ячейки, чтобы читала имя программы версию дату и запускала? Я по твоему примеру создаю рядом с программой текстовый документ с датой, версией программы и название программы пример:
echo %DATE%-adwcleaner-%from%> "%~dp0adwcleaner_version.txt"
А в конце после того как MInst пробежался, запускается скрипт который пробегает по всем каталогом читает текстовые документы с версией и вставляет В один текстовый документ пример:
@echo off
cd /d "%~dp0"
echo =======%DATE%======= > "%~dp0ver.txt"
FOR /r %%j in (*version.txt) do type "%%j" >> "%~dp0ver.txt"
start "" "%~dp0Portable\AkelPad\AkelPad.exe" "%~dp0ver.txt"
EXIT

[Цитировать]

    wadimus
  • 14910
  • Стаж: 8 лет
  • Сообщений: 749
  • Репутация:91

    [+] [-]
bios83, млин, с языка сорвал прям ..
думал давно, как автообновляемые инсталляторы внедрить в оболочку типа MInstAll (ведь в ini-файлы нужны реальные цыфры версий) ..
типа такого:
[--тут вставляем номер по цыклу--]
Group= -тут номер группы --
Name=-- тут вставляем содержимое файла name.txt --
Hint=-- тут можно сделать отдельный файл краткого описания инсталлятора типа name2.txt и копировать его сюда --
Patch={Patch}\install\-- тут каталог --\ins.bat
Ver=-- тут вставляем версию из файла version.txt

[Цитировать]

    bios83
  • 2205
  • Стаж: 8 лет 11 месяцев
  • Сообщений: 101
  • Репутация:16

    [+] [-]
wadimus, Я с тобой соглашусь, что это всё сложно, муторно. Ладно если бы в каждой ячейке находился файл типа *.ini в который хранится вся информация о версии что запускать и тому подобное, а оболочка просто сканирует эти ячейки и уже пользователи выводит какой имеется софт. Удобно было бы ещё для пользователя добавлять и удалять нужные и ненужные ячейки если бы содержался файл установки конфигурации в ячейке. Более или менее как бы подходит MInstAll , для запуска установки, обновление и портативных программ.

Страница 3 из 9


Показать сообщения:    

Текущее время: 14-Дек 05:42

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы