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

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

sov44 01-10-2011 16:38 1763722

wget
 
Нужна помощь в написании скрипта по запуску программы, скаченной и обновлённой с помощью wget
Код:

wget -N http://ххх
Если обновления программы не произошло, запускать её не нужно.

Iska 01-10-2011 17:08 1763730

sov44, поскольку ошибки при этом не возникает (2.12 Exit Status), на мой взгляд, самый надёжный способ — посчитать контрольную сумму локального файла до вызова wget и после (File Checksum Integrity Verifier, Sigcheck, FSUM или скриптом на WSH/PoSH), Затем сравнить.

P.S. Можно, конечно, попробовать сравнивать дату/время до и после, поиграться с атрибутами и т.п. Но контрольная сумма — надёжнее.

sov44 01-10-2011 17:57 1763751

Iska, а если как то попытаться выловить в командной строке wget строчку, что файл уже скачан и от неё пробовать, чтобы не пользоваться сторонним софтом?

Iska 01-10-2011 20:55 1763857

sov44, конечно, можно. Но тут хорошо бы посмотреть в исходный код wget, дабы убедиться в единственности данного сообщения. А так — например, вот:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

("%ProgramFiles%\WGet\wget.exe" --timestamping "http://download.sysinternals.com/Files/Sigcheck.zip" 2>&1 |^
findstr.exe /r /c:"^Server file no newer than local file .* -- not retrieving.$" >nul) && (
        echo Skipping
) || (
        echo Not skipping
)
endlocal
exit /b 0

P.S. Это только пример! Из данного кода не видно, был ли файл загружен или нет. Видно только — был или не был пропущен.

sov44 01-10-2011 21:22 1763878

Iska, Спасибо! Именно то, что и нужно. Запуск прикручу.
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

(wget -N http://giskirov.ru/download/download.php?book=3 2>&1 |^
findstr.exe /r /c:"^Server file no newer than local file .* -- not retrieving.$" >nul) && (
        echo Обновления файла нет
) || (
        echo Файл скачан и обновлён
)
endlocal
pause
exit /b 0


sov44 02-10-2011 00:47 1763981

Упаковал в rar sfx батник рядом со скриптом установки программы. Программа скачалась в %temp% и и от туда установилась. Подскажите, как скаченную программу ( из %temp% ) скопировать в директорию, из которой был запущен rar sfx?

Iska 02-10-2011 10:11 1764039

Цитата:

Цитата sov44
Спасибо! Именно то, что и нужно. »

sov44, нет! Вы меня так и не поняли:
Цитата:

Цитата Iska
P.S. Это только пример! Из данного кода не видно, был ли файл загружен или нет. Видно только — был или не был пропущен. »

Это никак не то, что нужно. Допустим, Вы пытаетесь загрузить файл, загрузка по каким-то причинам обрывается, а пакетный файл в Вашем примере честно скажет — «Файл скачан и обновлён», что не есть верно. Понимаете?

Надо:

1. Отследить код возврата wget.
2. Если он нулевой — тогда уже имеет смысл проверять выдачу wget на наличие текста о пропуске загрузки, наподобие:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sURL=http://download.sysinternals.com/Files/Sigcheck.zip

call :GetTemporaryName

>"%TemporaryName%" 2>&1 "%ProgramFiles%\WGet\wget.exe" --timestamping "%sURL%" && (
        findstr.exe /r /c:"^Server file no newer than local file .* -- not retrieving.$" "%TemporaryName%" >nul && (
                echo Download Skipping
        ) || (
                echo Download OK
        )
) || (
        echo Download Error
)

del /f /q "%TemporaryName%"

endlocal
exit /b 0
rem ==========================================================================

rem ==========================================================================
rem Функция GetTemporaryName()
rem
rem Серый форум / CMD/BAT: генерация пути для временного файла или папки
rem (http://forum.script-coding.com/viewtopic.php?id=6259)
rem ==========================================================================
:GetTemporaryName
    setlocal enableextensions enabledelayedexpansion

:NextName
    set sTempName=%temp%\temp%random%.tmp

    if exist "%sTempName%" goto :NextName

    set sProcName=%~0

    endlocal & set %sProcName:~4%=%sTempName%
    exit /b 0
rem ==========================================================================


sov44 02-10-2011 14:44 1764162

Iska, на Вашем примере не могу отследить переменную пути, откуда запущен rar sfx

Iska 02-10-2011 18:24 1764326

sov44, Вам и не надо отслеживать. Используйте параметр «--directory-prefix="<Путь для сохранения>"» в командной строке wget (Проект OpenNet: MAN wget (1) Команды и прикладные программы пользовательского уровня (FreeBSD и Linux)).

sov44 04-10-2011 07:06 1765408

Цитата:

Цитата Iska
Надо:
1. Отследить код возврата wget. »

Как их отследить?

Iska 04-10-2011 07:51 1765416

Цитата:

Цитата sov44
Как их отследить? »

Код из поста #7 это делает:
Код:


>"%TemporaryName%" 2>&1 "%ProgramFiles%\WGet\wget.exe" --timestamping "%sURL%" && (
        findstr.exe /r /c:"^Server file no newer than local file .* -- not retrieving.$" "%TemporaryName%" >nul && (
                echo Download Skipping
        ) || (
                echo Download OK
        )
)
|| (
        echo Download Error
)



sov44 04-10-2011 21:20 1765995

Iska, добавил проверку на скачивание, однако где-то ошибка, т.к. при наличии скачанного файла не появляется сообщение "echo Обновления файла нет"
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

2>&1 wget.exe -N http://giskirov.ru/download/download.php?book=3 && (
findstr.exe /r /c:"^Server file no newer than local file .* -- not retrieving.$" >nul && (
        echo Обновления файла нет
) || (
      start /wait gis.exe
    )
) || (
        echo Ошибка скачивания
)
endlocal
exit /b 0


Iska 04-10-2011 23:08 1766076

sov44, у Вас вывод «wget.exe» идёт на консоль, а не во временный файл. «findstr.exe» в Вашем варианте вовсе должен стоять и ждать ввода с консоли, ибо ему не указано, где осуществлять поиск.

Ещё раз посмотрите на код из #7.

sov44 09-04-2012 21:48 1896609

Iska, вновь нужна Ваша помощь! При запуске скрипта из папки, идёт скачивание файла. При запуске скрипта через планировщик скачивание не идёт. Перепробовал разные варианты, решения не нашел. :(
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sURL=http://akelpad.sourceforge.net/files/tools/AkelUpdater.zip

call :GetTemporaryName
>"%TemporaryName%" 2>&1 "c:\перевалка\1\wget.exe" -N "%sURL%" &&(
        findstr.exe /r /c:"^Server file no newer than local file .* -- not retrieving.$" "%TemporaryName%" >nul &&(
              echo.
              echo              Обновления нет^^!
              ping 127.0.0.1 -n 3 >nul
        ) || (
              Echo Тут запускается программа ^^!
              ping 127.0.0.1 -n 3 >nul
        )
) || (
              Echo msgbox "╬сэютыхэшх эх тючьюцэю. ═хЄ яюфъы■ўхэш* шэЄхЁэхЄ">"%temp%\msg.vbs"
              %temp%\msg.vbs
              del %temp%\msg.vbs
)

if not exist "%windir%\Tasks\At1.job" AT 11:00 /INTERACTIVE /EVERY:7 "c:\перевалка\1\run.cmd"

endlocal
exit /b 0

:GetTemporaryName
setlocal enableextensions enabledelayedexpansion

:NextName
set sTempName=%temp%\temp%random%.tmp
if exist "%sTempName%" goto :NextName
set sProcName=%~0
endlocal & set %sProcName:~4%=%sTempName%
exit /b 0


Iska 09-04-2012 23:11 1896670

Цитата:

Цитата sov44
При запуске скрипта через планировщик скачивание не идёт.»

Как Вы это определили?

sov44 09-04-2012 23:37 1896685

Цитата:

Цитата Iska
Как Вы это определили? »

запускал планировщик вручную. Скрипт пишет, что обновления нет, даже если рядом нет скачанного файла.

Iska 09-04-2012 23:42 1896688

Цитата:

Цитата sov44
запускал планировщик вручную. »

Поздравляю! Я лично предпочитаю, чтобы этим занималась ОС.


Как именно Вы определили, что:
Цитата:

Цитата sov44
…скачивание не идёт. »


sov44 09-04-2012 23:52 1896698

Цитата:

Цитата Iska
Поздравляю! Я лично предпочитаю, чтобы этим занималась ОС. »

Я тоже. А как проверить работу? ждать месяц? :)

Iska 10-04-2012 00:02 1896704

sov44, вот Вы запустили задание (а не «планировщик») вручную. Как Вы определяете… Ага, вижу: Вы позже дописали в пост #16 — как. Вот этого я от Вас и добивался.

Теперь вставьте в Ваш пакетный файл:
Код:

msg.exe * [%CD%]
и осознайте, что он рассчитан на корректную работу исключительно в том случае, если текущим каталогом для него является тот самый каталог, в котором находится пакетный файл. В случае созданного Вами задания это не так.

sov44 10-04-2012 00:18 1896713

Iska, кажется решил, добавив путь для сохранения скачанного файла
Код:

call :GetTemporaryName
>"%TemporaryName%" 2>&1 "c:\перевалка\1\wget.exe" -N -P "c:\перевалка\1" "%sURL%" &&(
        findstr.exe /r /c:"^Server file no newer than local file .* -- not

Видимо wget при запуске из планировщика не находил, что с чем сравнивать :)

sov44 24-08-2012 11:23 1976060

В продолжение темы
Решил испытать wget на работе, где установлен прокси (192.168.0.5:8080). Выход в инет естественно не получился.
Iska, подскажите, как определить наличие прокси, если он есть, добавить нужную переменную и скачать файл. Как вариант кода - код из поста 14

Upd. Нашел, как определить настройки прокси
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

SET UNISTALL=HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings
For /F "Skip=4 Tokens=3 delims=        " %%A In ('Reg Query "%UNISTALL%" /V ProxyServer 2^>nul') Do Set Proksi=%%A
Echo Настройки прокси %Proksi%
pause>nul

но вот как добавит это в wget, пока не знаю.

Iska 24-08-2012 11:52 1976079

sov44, кроме как wget proxy - Поиск в Google не подскажу.

sov44 24-08-2012 13:05 1976132

Цитата:

Цитата Iska
не подскажу »

жаль. Решил так:
Код:

if exist wget.ini del /q wget.ini
SET UNISTALL=HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings
For /F "Skip=4 Tokens=3 delims=        " %%A In ('Reg Query "%UNISTALL%" /V ProxyServer 2^>nul') Do Set Proksi=%%A
if defined Proksi (
>> wget.ini Echo http_proxy = %Proksi%/
>> wget.ini Echo use_proxy = on
)


sov44 24-05-2013 10:32 2155317

Подскажите, есть ли в Wget ключ, чтобы не скачивались файлы менее 15333 б. Или только парсить лог?

Iska 24-05-2013 11:40 2155375

sov44, поясните вопрос.

sov44 24-05-2013 13:31 2155429

Цитата:

Цитата Iska
поясните вопрос. »

вроде понятно написано.

решено через парсер лога.

Iska 24-05-2013 22:00 2155769

sov44, в том-то и дело, что непонятно. Ответ напрямую будет зависеть от того, как Вы загружаете файлы. Варианта прямого указания:
Цитата:

Цитата sov44
ключ, чтобы не скачивались файлы менее 15333 б. »

не существует. Если сервер поддерживает отдачу размера, то можно запросить его, наподобие (кодировка пакетного файла — windows-1251):
читать дальше »
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sURL=http://files.avast.com/iavs5x/avast_free_antivirus_setup.exe

>nul chcp 1251
for /f "usebackq tokens=2 delims= " %%i in (
        `@ "%ProgramFiles%\GnuWin32\bin\wget.exe" --verbose --spider "%sURL%" 2^>^&1 ^| find.exe /i "Длина: "`
) do set sLength=%%~i
>nul chcp 866

if defined sLength echo [%sLength%]

endlocal
exit /b 0


и дальше уже «танцевать» от полученного размера.

sov44 23-07-2013 17:03 2189290

Как подправить скрипт, чтобы он дожидался окончания скачивания, только после этого распаковывал файл. Все операции в фоне.
Проблема в том, что скрипт пытается распаковать ещё не скаченный файл.
Код:

@echo off
setlocal enabledelayedexpansion

set sURL=http://www.giskirov.ru/download/download.php?book=4
del /q wget-log 2>nul

wget.exe -b -N -P "Update" "%sURL%" >nul&& (
findstr.exe /r /c:"^Server file no newer than local file .* -- not retrieving.$" "%~dp0wget-log" >nul &&(
          Echo Обновления не требуется
) || (
          Update\7z.exe x giskirov_lite.zip -o"%cd%\.." -y
          Echo Программа обновлена 
)
) || (
          Echo Нет подключения интернет
)


Iska 23-07-2013 17:14 2189296

Цитата:

Цитата sov44
Как подправить скрипт, чтобы он дожидался окончания скачивания, только после этого распаковывал файл. Все операции в фоне.
Проблема в том, что скрипт пытается распаковать ещё не скаченный файл. »

Убрать «-b» из:
Код:

wget.exe -b -N -P "Update" "%sURL%" …

sov44 23-07-2013 17:47 2189312

Цитата:

Цитата Iska
Убрать «-b» из: »

нужно, чтобы качало в фоне. Насколько я понял из мануала, это возможно только с ключом -b
Я не хочу видеть окно консоли.
hidcon подавляет окно wget, но оставляет открытым окно батника. Если и на него ставить hincon, получится-ли?

Iska 23-07-2013 19:07 2189345

sov44, Вы странный человек:
Цитата:

Цитата sov44
Проблема в том, что скрипт пытается распаковать ещё не скаченный файл.»

Цитата:

Цитата sov44
нужно, чтобы качало в фоне. »

Вы определитесь.

Зачем Вам нужна фоновая загрузка, если Вам в любом случае нужно ожидать завершения загрузки, а?

Цитата:

Цитата sov44
Я не хочу видеть окно консоли. »

Мда…

sov44 29-12-2014 10:43 2449463

Нужно получить в переменную ссылку на portable version SumatraPDF
http://www.sumatrapdfreader.org/prerelease.html
Проблема в том, что скачивается бинарная страничка, из которой не удаётся выделить нужную ссылку.

upd
Не знаю, насколько это верно, но удалось выделить ссылку через скачивание в текстовый файл http://kjkpub.s3.amazonaws.com/sumat...matralatest.js :)

Iska 29-12-2014 11:59 2449501

Страница загружается самая обычная. Ссылку Вы в загруженной странице не выделите, поскольку она формируется программно. Так что, на самом деле Вам нужен другой файл — скрипт, в котором содержатся ссылки:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq tokens=3 delims==; " %%i in (
        `@"%ProgramFiles%\GnuWin32\bin\wget.exe" -q -O- "http://kjkpub.s3.amazonaws.com/sumatrapdf/sumatralatest.js" ^| find.exe /i "var sumLatestExe = "`
) do set sUrl=%%~i

if defined sUrl echo [%sUrl%]

endlocal
exit /b 0

Постоянный ли у него адрес — не знаю. Смотрите, пробуйте.

sov44 10-07-2018 19:12 2821356

Помогите с ключами wget для скачивания файла по ссылке https://picpick.app/ru/start?download=free

Iska 10-07-2018 19:41 2821364

Там же написано, где брать файл по ссылке:
Код:

https://www.picpick.org/releases/latest/picpick_inst.exe
Параметры? Ну, у меня по умолчанию стоят такие:
Код:

wget.exe --no-check-certificate --continue "https://www.picpick.org/releases/latest/picpick_inst.exe"

sov44 10-07-2018 19:55 2821369

Iska, благодарю!
Чем Вы увидели прямую ссылку? В этот раз через Wireshark не удалось её увидеть.

Iska 10-07-2018 20:13 2821373

Скрытый текст


Время: 17:38.

Время: 17:38.
© OSzone.net 2001-