Baixe um arquivo via HTTP de um script no Windows

19

Eu quero uma maneira de baixar um arquivo via HTTP, dada a URL (semelhante à forma como o wget funciona). Vi as respostas para esta pergunta , mas tenho duas alterações nos requisitos:

  • Gostaria que ele fosse executado no Windows 7 ou posterior (embora, se funcionar no Windows XP, isso seja um bônus).
  • Eu preciso ser capaz de fazer isso em uma máquina de estoque com nada além do script, que deve ser um texto que possa ser facilmente inserido em um teclado ou copiado / colado.
  • Quanto menor, melhor.

Então, basicamente, eu gostaria de um script .cmd (lote), VBScript ou PowerShell que possa realizar o download. Ele pode usar o COM ou invocar o Internet Explorer, mas precisa ser executado sem nenhuma entrada e deve se comportar bem quando invocado sem uma exibição (como por meio de uma sessão Telnet ).

Jason R. Coombs
fonte
dload v1.0 uma ferramenta de linha de comando win32 como wget superuser.com/a/833445/384998
seizu
Não é uma duplicata porque esta pergunta está especificamente procurando algo que será executado em uma máquina de estoque (sem software adicional, como o wget para Windows).
Jason R. Coombs
@ JasonR.Coombs A resposta aceita é a mesma de uma das respostas nessa pergunta, para que o futuro leitor não receba mais nada.
Franklin Yu
Concordo; neste ponto, a questão mais geral substitui essa.
Jason R. Coombs

Respostas:

16

Se você possui o PowerShell> = 3.0, pode usar Invoke-WebRequest :

Invoke-WebRequest -OutFile su.htm -Uri superuser.com

Ou jogou golfe:

iwr -outf su.htm superuser.com
Steven Penny
fonte
2
One-liner do prompt regular do cmd:powershell -command "iwr -outf su.htm superuser.com"
valiano
14

Eu usaria o BITS ( primer ):

Background Intelligent Transfer Service (BITS) is a component of modern
Microsoft Windows operating systems that facilitates prioritized,
throttled, and asynchronous transfer of files between machines using
idle network bandwidth.

A partir do Windows 7, a Microsoft recomenda o uso dos cmdlets do PowerShell para BITS.

% import-module bitstransfer
% Start-BitsTransfer http://path/to/file C:\Path\for\local\file

Você também pode usar o BITS via COM , veja aqui um exemplo de VBScript . E existe o ' bitsadmin ', uma ferramenta de linha de comando para controlar downloads:

BITSAdmin is a command-line tool that you can use to create download or
upload jobs and monitor their progress.

No Windows 7 bitsadmin.exeafirma-se que é uma ferramenta obsoleta. Mesmo assim:

% bitsadmin.exe /transfer "NAME" http://path/to/file C:\Path\for\local\file
akira
fonte
2
Parece agora que o bitsadmin está obsoleto e não pode ser incluído em versões futuras do Windows.
Jason R. Coombs
@ JasonR.Coombs: link? referência?
Akira
2
technet.microsoft.com/en-us/magazine/ff382721.aspx ... então, em vez de "bitadmin.exe", apenas se usa bits-cmdlets.
Akira
1
obrigado por isso. Tudo o que eu precisava era que o bitsadmin estivesse me dizendo que estava obsoleto quando o executei.
Jason R. Coombs
nota que fora caminho deve ser totalmente qualificado e não relativa (chapéu de ponta superuser.com/questions/365755/... )
Matt Wilkie
7

Experimente a classe Web Client . Há um exemplo de script do PowerShell na parte inferior desta página:

$c = new-object system.net.WebClient
$r = new-object system.io.StreamReader $c.OpenRead("http://superuser.com")
echo $r.ReadToEnd()
Charles Gargent
fonte
2
Isso é útil. Descobri que o WebClient também possui um método DownloadFile, que fará o download do conteúdo diretamente em um arquivo. Obrigado.
Jason R. Coombs
3

Copie e cole as seis linhas a seguir (ou apenas as últimas quatro linhas) em um arquivo de texto. Em seguida, renomeie-o para vget.vbs.

'cscript vget.vbs >FILE.TXT
'Run this vbscript at command line. Use above syntax to download/create FILE.TXT
Set oX = CreateObject("Microsoft.XmlHTTP")
oX.Open "GET", "http://www.exampleURL.com/FILE.TXT", False
oX.Send ""
WScript.Echo oX.responseText

Obviamente, você precisa personalizar três coisas neste script para fazê-lo funcionar.

  1. A parte que diz " http://www.exampleURL.com/FILE.TXT ". Você precisará substituir o URL correto pelo arquivo que deseja baixar.
  2. O comando que você executará na linha de comando para executar este script; precisará especificar o nome correto para o script vget.vbs, se foi assim que você o chamou.
  3. E o nome para o FILE.TXTqual você deseja que a saída seja direcionada por uma linha de comando em lote do DOS .

Eu apenas tentei usar isso para baixar um arquivo de texto ASCII bruto (um script cmd mais poderoso) da minha conta do Dropbox , então não sei se ele funcionará para arquivos EXE, etc .; ou de outros servidores da web.

Se você dispensar as duas primeiras linhas de comentário, elas terão apenas quatro linhas. Se você conhece o VBScript, pode até levar esse código em sua cabeça e digitá-lo na linha de comando, conforme necessário. Ele contém apenas cinco componentes-chave de comando: CreateObject, .Open, .Send, WScript.Echoe .responseText.

ozidroid
fonte