Войти

Показать полную графическую версию : [решено] помогите устранить проблему цикла в bat


alexmoreman
29-03-2011, 11:22
в общем есть батник который должен работать по циклу, скачать первую ссылку из list.txt в html файл
потом запускается vbs скрипт и обрабатывает скачанную страницу и передает прямую ссылку вновь на качалку(vbs тьфу-тьфу работает)
после отработки vbs происходит удаление html файла, и должно начаться по новой
потому как в list.txt ссылки идут списком (каждая в новой строке "без пробелов") и так пока не закончаться.

У меня происходит так: Первую ссыль отрабатывает а со второй "шляпа"
вот код батника
for /f "usebackq delims=" %%a in ("list.txt") do call :Download "%%a"
exit /b
:Download
wget %1 -O %TEMP%\stranyca.html
wscript script.vbs //b //nologo
del %TEMP%\stranyca.html
exit /b
чё может не так работать?
Что выше решено
И так далее по этой же теме следующая загвоздка вышла..
создаю такой вот батник
setlocal enabledelayedexpansion
for /l %%j in (1,1,9) do @(
set "$j=%%j"
for /l %%i in (1,1,8) do @(
set "$i=%%i"
call wget -c -t 0 http://adres.sait/64/6471/00%%$j:~-3%%/big/%%$i:~-1%%.jpg -O !n!.jpg
)
)
и на выходе скачиваемой по ссылке картинки я хочу иметь их по порядку тоесть на месте в коде !n!.jpg иметь допустим 001.jpg 002.jpg 003 и т.д.
я пробовал по тому же принципу добавив нечто подобное к примеру(да простите меня если ооное бред полнейший)
for /l %%k in (1,1,150) do (
set /a n = %%k + 1
)
пробовал переставляя его место положение .. то работает да не так то вообще отказывался.. я и !n! менял думая что зависело.. но не тут то было..
Прошу помощи от ваших умных голов

Petya V4sechkin
29-03-2011, 11:33
alexmoreman, ну вы же обращаетесь к процедуре :Download
А в конце что? exit /b (выход из батника).

Для возвращения из процедуры используется команда goto :eof

alexmoreman
29-03-2011, 11:46
Petya V4sechkin, таже лажа, усё равно не работает.
он как бы скачивает ссылку под номером 2 и типа запускает vbs , а вот скачивание уже прямой ссылки номер2 уже неработает
вот кстать vbs
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = False
With WScript.CreateObject("WScript.Shell")
strPath = .ExpandEnvironmentStrings(.Environment("USER").Item("TEMP"))

End With

objIE.Navigate "file://" & strPath & "\stranyca.html"
While objIE.Busy: WScript.Sleep 200:Wend
For Each tag In objIE.Document.getElementsByTagName("i")
strFilm = tag.innerHTML
Next
strFilm = Replace(strFilm," ","_") ' ?я*яї?ў*< яї?-<
Set tag = objIE.Document.getElementByid("start_download_form")
Set WshShell = CreateObject("WScript.Shell")
Retval = WshShell.Run ("cmd /c wget -c -t 0 http://share-nn.ru/" & _
tag.getAttribute("action") &" -O Film/" & strFilm, 1, True)
objIE.Quit

Я похоже догнал в чём может быть засада.
когда скачивается вторая страница то там пока нет прямой ссылки а предупреждение с ожиданием 300 сек(тоесть парсить vbs -у просто нечего)
может подскажите как задержку сделать для скачивания последующей ссылки (тоесть html документа)

я опять затупил
я создал файлик vbs
wscript.sleep wscript.arguments(0)
И пришпандорил его к батнику
Setlocal EnableDelayedExpansion
Set file=list.txt
for /f "usebackq delims=" %%a in ("%file%") do call :Download "%%a"
exit /b
:Download
wget %1 -O %TEMP%\stranyca.html
wscript script.vbs //b //nologo
del %TEMP%\stranyca.html
cscript //nologo delay.vbs 300000
Так он вроде норм заработал, но после скачивания последней ссылки
всё равно включает паузу
чё сделать я уже туплю

Iska
29-03-2011, 12:50
alexmoreman, ну вы же обращаетесь к процедуре :Download
А в конце что? exit /b (выход из батника).
Для возвращения из процедуры используется команда goto :eof »
«exit /b» — допустимая команда.

При вызове создается новый контекст текущего пакетного файла с заданными аргументами, и управление передается на инструкцию, расположенную сразу после метки. Для выхода из такого пакетного файла необходимо дважды достичь его конца. Первый выход возвращает управление на инструкцию, расположенную сразу после строки CALL, а второй выход завершает выполнение пакетного файла. Команда GOTO /? выводит описание расширения GOTO :EOF, позволяющее выполнить быстрый возврат из пакетного файла.


Я обычно именно ею и пользуюсь, поскольку она позволяет вернуть errorlevel в место вызова, что затем можно проанализировать.

alexmoreman
29-03-2011, 13:24
если после
cscript //nologo delay.vbs 300000
поставив
exit /b
то у меня всё рубится

подскажите как отрубить действие delay.vbs
когда нет ссылок в list.txt

alexmoreman
15-07-2011, 01:50
простите за данный пост.. пробую поднять тему ..
но с новым вопросом дабы не создавать новую тему

amel27
15-07-2011, 08:46
с новым вопросом »каким?

alexmoreman
15-07-2011, 12:32
amel27, создаю такой вот батник
setlocal enabledelayedexpansion
for /l %%j in (1,1,9) do @(
set "$j=%%j"
for /l %%i in (1,1,8) do @(
set "$i=%%i"
call wget -c -t 0 http://adres.sait/64/6471/00%%$j:~-3%%/big/%%$i:~-1%%.jpg -O !n!.jpg
)
)
и на выходе скачиваемой по ссылке картинки я хочу иметь их по порядку тоесть на месте в коде !n!.jpg иметь допустим 001.jpg 002.jpg 003 и т.д.
я пробовал по тому же принципу добавив нечто подобное к примеру(да простите меня если ооное бред полнейший)
for /l %%k in (1,1,150) do (
set /a n = %%k + 1
)
пробовал переставляя его место положение .. то работает да не так то вообще отказывался.. я и !n! менял думая что зависело.. но не тут то было..

amel27
15-07-2011, 12:44
alexmoreman, типа такого?
SetLocal EnableDelayedExpansion

for /l %%j in (1,1,9) do @(set "$j=00%%j"
for /l %%i in (1,1,8) do @(set "$i=%%i"
set/a $in+=1& set "$sn=00!$in!"
wget -c -t 0 http://adres.sait/64/6471/!$j:~-3!/big/!$i!.jpg -O !$sn:~-3!.jpg
))

alexmoreman
15-07-2011, 14:06
amel27, обалдеть.. работает великолепно.. спасибо огромнейшее..




© OSzone.net 2001-2012