1 (изменено: Valera, 2012-03-07 07:26:31)

Тема: CMD/BAT: Загрузка файла с сайта с использованием wget

Добрый день.

@echo off 
REM Основной каталог.
SET BASEDIR=c:\Program Files\GnuWin32\bin\
REM имя wget, возможно с подкаталогом.
SET WGET=wget.exe
REM Ссылка без указания конечного файла.
SET URL=http://www.jensroesner.de/wgetgui/data/
REM Указываем имя файла для скачки. 
SET FILE=wgetgui.zip
REM Укажем имя файла лога.
SET LOG=wget.log
REM Укажим программы для распаковки архива.
SET UNPACK="c:\Program Files\7-Zip\7z.exe"
REM Укажим где лежит архив, он сохраняется в BASEDIR
SET ARHIVE="c:\Program Files\GnuWin32\bin\wgetgui.zip"
REM Укажим куда извлечь файлы.
SET EXTRACT="c:\Program Files\GnuWin32\bin\wgetgui"

REM Проверим существует ли файл по ссылке.
"%BASEDIR%%WGET%" -a -b --spider %URL%%FILE% -o "%BASEDIR%%LOG%"
if errorlevel 0 goto NORMAL 
if errorlevel 1 goto GOODBYE 

:NORMAL
REM Запустим закачку.
"%BASEDIR%%WGET%" -t 10 -w 5 -nd -N -a -b %URL%%FILE% -o "%BASEDIR%%LOG%"

REM Проверим существует архив.
if exist %ARHIVE% (
         REM Выполним распоковку архива, если он существует.
         %UNPACK% e %ARHIVE% -o%EXTRACT% -y >> "%BASEDIR%%LOG%"
    ) else (
    REM Если файл не существует запишем это.
    echo %ARHIVE% file is missing %DATE%%TIME% >> "%BASEDIR%%LOG%"
    echO ---END--- >> "%BASEDIR%%LOG%"
    )

:GOODBYE
exit

Посоветуйте может, что улучшить или поправить. Замечания.

Вот этот кусок нормально не отрабатывает.

REM Проверим существует ли файл по ссылке.
"%BASEDIR%%WGET%" -a -b --spider %URL%%FILE% -o "%BASEDIR%%LOG%"
if errorlevel 0 goto NORMAL
if errorlevel 1 goto GOODBYE

Придется ввести проверку доступности ресурса, через ping к примеру, а потом нужно разбирать вывод команды wget --spider, т.к. она выводит существует файл или нет, выводит именно строку.

2 (изменено: Valera, 2012-03-07 10:52:31)

Re: CMD/BAT: Загрузка файла с сайта с использованием wget

Добрый день, подскажите еще такой момент
Нужно проверять размер архива до скачки файла и после, если размер остался одинаковым то распаковку не производить.

Как выполнить проверку размера файла?
С использованием dir и for?
Сам скрипт выглядит уже вот так.

@echo off 
REM Основной каталог.
SET BASEDIR=%PROGRAMFILES%\wget\
REM имя wget, возможно с подкаталогом.
SET WGET=wget.exe
REM Ссылка без указания конечного файла.
SET URL=http://www.gnivc.ru/html/gnivcsoft/KLADR/
REM Указываем имя файла для скачки. 
SET FILE=BASE.7z
REM Укажем имя файла лога.
SET LOG=wget.log
REM Укажим программы для распаковки архива.
SET UNPACK="%PROGRAMFILES%\7-Zip\7z.exe"
REM Укажим где лежит архив, он сохраняется в BASEDIR
SET ARHIVE="%PROGRAMFILES%\wget\%FILE%"
REM Укажим куда извлечь файлы.
SET EXTRACT="D:\base\"
SET BLAT="%PROGRAMFILES%\blat\blat.exe"

REM Проверим существует ли файл по ссылке.
"%BASEDIR%%WGET%" --spider %URL%%FILE% -o "%BASEDIR%%LOG%"
REM echo %ERRORLEVEL%
if errorlevel 0 goto NORMAL 
if errorlevel 1 goto GOODBYE 

:NORMAL
REM Запустим закачку.
"%BASEDIR%%WGET%" -t 10 -w 5 -nd -N -a -b %URL%%FILE% -o "%BASEDIR%%LOG%"

REM Проверим существует архив.
if exist %ARHIVE% (
         REM Выполним распоковку архива, если он существует.
         %UNPACK% e %ARHIVE% -o%EXTRACT% -y >> "%BASEDIR%%LOG%"
         %BLAT% -p admin -charset windows-1251 -subject "Kladr was update %DATE%%TIME%" -body "Kladr was update %DATE%%TIME%" -to email -attach "%BASEDIR%%LOG%"
    ) else (
    REM Если файл не существует запишем это.
    echo %ARHIVE% file is missing %DATE%%TIME% >> "%BASEDIR%%LOG%"
    )

:GOODBYE
:exit