Показать полную графическую версию : [решено] wget
Нужна помощь в написании скрипта по запуску программы, скаченной и обновлённой с помощью wget wget -N http://ххх Если обновления программы не произошло, запускать её не нужно.
sov44, поскольку ошибки при этом не возникает (2.12 Exit Status (http://www.gnu.org/software/wget/manual/wget.html#Exit-Status)), на мой взгляд, самый надёжный способ — посчитать контрольную сумму локального файла до вызова wget и после (File Checksum Integrity Verifier (http://support.microsoft.com/kb/841290/ru), Sigcheck (http://technet.microsoft.com/en-us/sysinternals/bb897441), FSUM (http://www.slavasoft.com/fsum/) или скриптом на WSH/PoSH), Затем сравнить.
P.S. Можно, конечно, попробовать сравнивать дату/время до и после, поиграться с атрибутами и т.п. Но контрольная сумма — надёжнее.
Iska, а если как то попытаться выловить в командной строке wget строчку, что файл уже скачан и от неё пробовать, чтобы не пользоваться сторонним софтом?
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. Это только пример! Из данного кода не видно, был ли файл загружен или нет. Видно только — был или не был пропущен.
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
Упаковал в rar sfx батник рядом со скриптом установки программы. Программа скачалась в %temp% и и от туда установилась. Подскажите, как скаченную программу ( из %temp% ) скопировать в директорию, из которой был запущен rar sfx?
Спасибо! Именно то, что и нужно. »
sov44, нет! Вы меня так и не поняли:
P.S. Это только пример! Из данного кода не видно, был ли файл загружен или нет. Видно только — был или не был пропущен. »
Это никак не то, что нужно. Допустим, Вы пытаетесь загрузить файл, загрузка по каким-то причинам обрывается, а пакетный файл в Вашем примере честно скажет — «Файл скачан и обновлён», что не есть верно. Понимаете?
Надо:
1. Отследить код возврата (http://www.gnu.org/software/wget/manual/wget.html#Exit-Status) 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 ==========================================================================
Iska, на Вашем примере не могу отследить переменную пути, откуда запущен rar sfx
sov44, Вам и не надо отслеживать. Используйте параметр «--directory-prefix="<Путь для сохранения>"» в командной строке wget (Проект OpenNet: MAN wget (1) Команды и прикладные программы пользовательского уровня (FreeBSD и Linux) (http://www.opennet.ru/man.shtml?topic=wget&category=1&russian=0)).
Надо:
1. Отследить код возврата wget. »
Как их отследить?
Как их отследить? »
Код из поста #7 (http://forum.oszone.net/post-1764039.html#post1764039) это делает:
…
>"%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
)
…
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
sov44, у Вас вывод «wget.exe» идёт на консоль, а не во временный файл. «findstr.exe» в Вашем варианте вовсе должен стоять и ждать ввода с консоли, ибо ему не указано, где осуществлять поиск.
Ещё раз посмотрите на код из #7 (http://forum.oszone.net/post-1764039.html#post1764039).
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
При запуске скрипта через планировщик скачивание не идёт.»
Как Вы это определили?
Как Вы это определили? »
запускал планировщик вручную. Скрипт пишет, что обновления нет, даже если рядом нет скачанного файла.
запускал планировщик вручную. »
Поздравляю! Я лично предпочитаю, чтобы этим занималась ОС.
Как именно Вы определили, что:
…скачивание не идёт. »
Поздравляю! Я лично предпочитаю, чтобы этим занималась ОС. »
Я тоже. А как проверить работу? ждать месяц? :)
sov44, вот Вы запустили задание (а не «планировщик») вручную. Как Вы определяете… Ага, вижу: Вы позже дописали в пост #16 (http://forum.oszone.net/post-1896685.html#post1896685) — как. Вот этого я от Вас и добивался.
Теперь вставьте в Ваш пакетный файл:
msg.exe * [%CD%]
и осознайте, что он рассчитан на корректную работу исключительно в том случае, если текущим каталогом для него является тот самый каталог, в котором находится пакетный файл. В случае созданного Вами задания это не так.
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 при запуске из планировщика не находил, что с чем сравнивать :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.