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

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

Ruslan-kam 11-09-2012 14:07 1986651

Скачать файл из интернета через переменную ссылку.
 
Не знаю правильно ли выразился, но в краце опишу что хочу получить.
Необходимо скачать установщик базы данных города 2gis ссылка которого меняется от месяца к месяцу. Допустим на данный момент последняя база скачивается по этой ссылке
Код:

http://download.2gis.ru/arhives/2GISData_Nizhnevartovsk-76.0.0.msi
Через месяц скорей всего будет
Код:

http://download.2gis.ru/arhives/2GISData_Nizhnevartovsk-77.0.0.msi
Для скачки использую cmd файл с такким содержанием
Код:

wget -O %~d0\!install\!WPI\Install\Office\2GISData_Nizhnevartovsk.msi -A *Nizhnevartovsk* -r -l 0 -nd http://download.2gis.ru/arhives/2GISData_Nizhnevartovsk-76.0.0.msi
Если указать
Код:

wget -O %~d0\!install\!WPI\Install\Office\2GISData_Nizhnevartovsk.msi -A *Nizhnevartovsk* -r -l 0 -nd http://download.2gis.ru/arhives/
то выбрасывает ошибку, сайт не даёт скачать структуру каталога.

Помогите придумать счётчик который каждый месяц бы прибавлял в ссылке единицу к версии.

Iska 11-09-2012 14:38 1986674

Цитата:

Цитата Ruslan-kam
Через месяц скорей всего будет »

А если не будет? На html-странице есть ссылка на эту самую текущую версию?

Ruslan-kam 11-09-2012 14:59 1986691

Iska, да есть. База данных Нижневартовска формат msi
Код:

http://nizhnevartovsk.2gis.ru/how-get/download/

Iska 11-09-2012 17:03 1986778

Ruslan-kam, тогда есть смысл парсить эту страницу, например, при помощи DOM, и только затем, получив корректную текущую ссылку, загружал её.

Ruslan-kam 11-09-2012 17:50 1986821

Iska, эээхххх тёмный лес я в этом...(

Kazun 11-09-2012 20:02 1986875

Можно на PowerShell:
Код:

$url  = "http://nizhnevartovsk.2gis.ru/how-get/download/"
$wc = New-Object Net.WebClient
$str = $wc.DownloadString($url).split("`n") | Select-String '(http://.+2GISData_Nizhnevartovsk.+msi)" '
$durl = $str.Matches[0].Groups[1].Value
$name = $durl.split("/")[-1]
$wc.DownloadFile($durl,$name)


Ruslan-kam 11-09-2012 21:36 1986952

Kazun, не получается. Создал файл с расширением .psc1, запускаю, окно PowerShell распахивается и тут же закрывается.

Kazun 11-09-2012 21:39 1986955

Сохраните под расширением ps1 и запускайте powershell -file C:\script.ps1

Ruslan-kam 12-09-2012 09:06 1987159

Kazun, тоже нет. Выскакивает PowerShell через секунду в нём появляются красные строки, прочесть не успеваю окно захлопывается. У меня Win7, установленная из оригинального образа.

Kazun 12-09-2012 09:29 1987170

powershell -executionpolicy bypass -file C:\script.ps1

Ruslan-kam 12-09-2012 10:31 1987208

Kazun, точно также, как и в предыдущий раз.

Kazun 12-09-2012 10:50 1987217

powershell -executionpolicy bypass -noexit -command "&{C:\script.ps1}"

Ruslan-kam 12-09-2012 18:49 1987507

Код:

Отсутствует выражение после одноместного оператора "+".
C:\script.ps1:1 знак:2
 + + <<<< ACQ-url  +AD0- +ACI-http://nizhnevartovsk.2gis.ru/how-get/download/+AC I-
    + CategoryInfo    : ParserError: (+:String) [], ParseException   
    + FullyQualifiedErrorId : MissingExpressionAfterOperator  PS C:\>


Kazun 13-09-2012 09:17 1987780

Проблема в сохранении скрипта,побилась кодировка.

Ruslan-kam 13-09-2012 09:51 1987796

Kazun, да теперь заработало. Я запусаю скрипт powershell через cmd, можно ли теперь сделать так чтобы скрипт power shell передавал ссылку в cmd, а cmd в свою очередь передавала её в wget?
Просто в wget наглядно отображается процесс загрузки, а powershell безмолвное окно.

Kazun 13-09-2012 10:03 1987805

Можно,но не проще добавить строчку про wget в скрипт?

Ruslan-kam 13-09-2012 10:09 1987809

если можно, то конечно так лучше.

И ещё нужно что бы скрипт качал не в ту папку в которой находится, а папку которую я пропишу в скрипте.

Kazun 13-09-2012 10:14 1987812

Напишите полную команду с wget.

Ruslan-kam 13-09-2012 10:34 1987819

Код:

@Echo Off
wget -O %~d0\!install\!WPI\Install\Office\2GISShell.msi -A 2GISShell* -r -l 0 -nd http://www.2gis.ru/distributive/shell/last/
wget -O %~d0\!install\!WPI\Install\Office\2GISData_Nizhnevartovsk.msi -A *Nizhnevartovsk* -r -l 0 -nd http://download.2gis.ru/arhives/2GISData_Nizhnevartovsk-76.0.0.msi


Kazun 13-09-2012 10:52 1987828

Код:

$path = "$((Get-Item $MyInvocation.MyCommand.Path).PsDrive.Root)!install\!WPI\Install\Office\2GISData_Nizhnevartovsk.msi"
$url  = "http://nizhnevartovsk.2gis.ru/how-get/download/"
$wc = New-Object Net.WebClient
$str = $wc.DownloadString($url).split("`n") | Select-String '(http://.+2GISData_Nizhnevartovsk.+msi)" '
$durl = $str.Matches[0].Groups[1].Value

wget -O $path -A "*Nizhnevartovsk*" -r -l 0 -nd $durl


Ruslan-kam 13-09-2012 11:12 1987834

Kazun, благодарю вроде всё работает без проблем. Но можно ли это всё записать в один командный файл. Получается сейчас я запускаю скрипт таким батником.
Код:

@Echo Off
wget -O %~d0\!install\!WPI\Install\Office\2GISShell.msi -A 2GISShell* -r -l 0 -nd http://www.2gis.ru/distributive/shell/last/
powershell -executionpolicy bypass -noexit -command "&{%~dp0www.2gis.ru_last.ps1}"

Можно ли через cmd запустить powershel и передать ему текст скрипта без использования промежуточного файла "www.2gis.ru_last.ps1". Не хочется плодить файлы. Нужно что бы всё было в одном cmd файле.

Kazun 13-09-2012 12:02 1987863

Не проверял:

Код:

powershell -command "&{wget -O %~d0\!install\!WPI\Install\Office\2GISShell.msi -A """*Nizhnevartovsk*""" -r -l 0 -nd ((New-Object Net.WebClient).DownloadString('http://nizhnevartovsk.2gis.ru/how-get/download/').split([char]10) | Select-String '(http://.+2GISData_Nizhnevartovsk.+msi)""" ').Matches[0].Groups[1].Value}"

Ruslan-kam 13-09-2012 18:05 1988090

Код:

Отсутствует выражение после одноместного оператора "-".
строка:1 знак:2
+ - <<<< command&{wget -O D:\!install\!WPI\Install\Office\2GISShell.msi -A "*Ni
zhnevartovsk*" -r -l 0 -nd ((New-Object Net.WebClient).DownloadString('http://n
izhnevartovsk.2gis.ru/how-get/download/').split([char]10) | Select-String '(htt
p://.+2GISData_Nizhnevartovsk.+msi)" ').Matches[0].Groups[1].Value}
    + CategoryInfo          : ParserError: (-:String) [], ParentContainsErrorR
  ecordException
    + FullyQualifiedErrorId : MissingExpressionAfterOperator


Kazun 13-09-2012 21:26 1988209

Почему Вы не можете скопировать правильно?

Ruslan-kam 14-09-2012 12:38 1988547

Как правильно? Всю жизнь копировал так: выделяю ЛКМ, далее ПКМ и "копировать".

Foreigner 14-09-2012 13:02 1988559

Ruslan-kam,
Вы запускаете из командного файла (cmd, bat) или просто из cmd.exe? Если второе, то работать не будет, надо замените %~dp0 на реальный путь

Ruslan-kam 14-09-2012 13:10 1988564

Из cmd

Kazun 14-09-2012 13:11 1988565

+ - <<<< command&{ - Явно не хватает пробела.

Ruslan-kam 14-09-2012 13:20 1988574

Kazun, спасибо разобрался.
Извините ступил немного, нужно было указать путь к wget.exe
Теперь работает без сбоев.


Время: 05:32.

Время: 05:32.
© OSzone.net 2001-