Questão É possível fazer o download usando a linha de comando do Windows?


Sem usar nenhum utilitário não padrão (Windows incluído), é possível fazer o download usando a linha de comando do Windows?

A versão preferida é o Windows XP, mas também é interessante conhecer novas versões.

Para esclarecer ainda mais a minha pergunta:

  • Tem que estar usando HTTP
  • O arquivo precisa ser salvo
  • Instalação padrão limpa do Windows, sem ferramentas extras

Então, basicamente, já que todo mundo está gritando Wget, Eu quero funcionalidade Wget simples, sem usar o Wget.


117


origem


Mais idéias em "Se o único navegador no Windows está morto, como se conectar à Internet?" a superuser.com/questions/50427/… - Arjan
E quais das doze versões do Windows XP seriam essas? - Arjan
Vamos dizer que pode ser qualquer versão do Windows XP SP2 e tudo liberado depois. - Robert Massa
@arjan Pergunta interessante, mas ainda não há resposta definitiva. - Robert Massa
Eu deveria ter pedido por "edição". Como Starter, Home, Professional, Media Center, Tablet, talvez até mesmo Embedded (boa mudança para ferramentas lá eu acho!) ... Ou as versões européias sem o Windows Media Player. :-) - Arjan


Respostas:


Você pode escrever um VBScript e executá-lo a partir da linha de comando

Crie um arquivo downloadfile.vbs e insira as seguintes linhas de código:

' Set your settings
    strFileURL = "http://www.it1.net/images/it1_logo2.jpg"
    strHDLocation = "c:\logo.jpg"

' Fetch the file
    Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")

    objXMLHTTP.open "GET", strFileURL, false
    objXMLHTTP.send()

If objXMLHTTP.Status = 200 Then
Set objADOStream = CreateObject("ADODB.Stream")
objADOStream.Open
objADOStream.Type = 1 'adTypeBinary

objADOStream.Write objXMLHTTP.ResponseBody
objADOStream.Position = 0    'Set the stream position to the start

Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.Fileexists(strHDLocation) Then objFSO.DeleteFile strHDLocation
Set objFSO = Nothing

objADOStream.SaveToFile strHDLocation
objADOStream.Close
Set objADOStream = Nothing
End if

Set objXMLHTTP = Nothing

Execute-o a partir da linha de comando da seguinte maneira:

cscript.exe downloadfile.vbs 

49



Gostaria de saber se isso depende do Internet Explorer, mas eu acho que isso seria uma boa resposta para "Se o único navegador no Windows está morto, como se conectar à Internet?" a superuser.com/questions/50427/… :-) - Arjan
isso é se a permissão para cscript.exe é permitida - hello_there_andy
Posso confirmar que testei este script em Windows PE 5.1 e funcionou como um encanto. Eu pretendo usá-lo para implantação offline, a fim de verificar a versão da plataforma na unidade USB contra um arquivo de texto armazenado no servidor. - Wayfarer


Começando com o Windows 7, acredito que há um único método que não foi mencionado ainda que é fácil:

Sintaxe:

bitsadmin / transfer job_name       / download / prioridade prioridade    URL   local \ caminho \ arquivo

Exemplo:

bitsadmin / transferir mydownloadjob / download / priority normal ^
                  http://example.com/filename.zip C: \ Users \username\ Downloads \ filename.zip

(Dividido em duas linhas separadas com ^ por legibilidade (para evitar a rolagem).

Atenção: Como apontado nos comentários, a bitsadmin mensagem de ajuda começa dizendo:

BITSAdmin is deprecated and is not guaranteed to be available in future versions of Windows.
Administrative tools for the BITS service are now provided by BITS PowerShell cmdlets.

... mas outro comentário relatou que funciona no Windows 8.


73



faz parte do windows7. - akira
não funcionou no meu windows 7 ... - jyz
Esta deveria ter sido a resposta mais votada. O bitsadmin é obsoleto em favor do Windows powershell. - lenkite
Confirme trabalhando no Win7 - kaiser
Nota: O BITSAdmin está obsoleto e não é garantido que esteja disponível em versões futuras do Windows. Ferramentas administrativas para o serviço BITS agora são fornecidas pelos cmdlets do BITS PowerShell. - Ujjwal Singh


O Windows 7 inclui o PowerShell e praticamente não há nada que você não possa fazer com o PowerShell.

Alternativa nativa para o wget no Windows PowerShell?


37



(New-Object Net.WebClient) .DownloadFile ('someurl', 'somepath') - Jason Stangroome
Powershell é para Powerrangers ! Como kool é isso e por que diabos eu não sabia disso? Tchau tchau cmd. - kaiser
de cmd.exe: powershell -command "& { iwr http://www.it1.net/it1_logo2.jpg -OutFile logo.jpg }". também funciona a partir do prompt de execução - Janus Troelsen
Sim, não há nada que você não possa fazer sem o powershell. É um verdadeiro tarpit turing :) - jcarpenter2
@JanusTroelsen minha versão do PowerShell respondeu "O termo 'iwr' não é reconhecido como o nome de um cmdlet, ..." mas depois de alguma investigação semelhante funcionou: powershell -command "$clnt = new-object System.Net.WebClient; $clnt.DownloadFile(\"https://host/name\", \"outpufilename\")" - rogerdpack


O PowerShell (incluído no Windows 8 e incluído no .NET para versões anteriores) tem esse recurso. o powershell comando permite executar comandos arbitrários do PowerShell a partir da linha de comando ou .bat Arquivo. Assim, a seguinte linha é o que é desejado:

powershell -command "& { (New-Object Net.WebClient).DownloadFile('http://example.com/', 'c:\somefile') }"

24



Isso não fornece uma resposta para a pergunta. Para criticar ou solicitar esclarecimentos de um autor, deixe um comentário abaixo do post - você sempre pode comentar sobre suas próprias postagens, e quando você tiver o suficiente reputação você poderá comentar em qualquer post. - harrymc
@harrymc certeza de que é uma resposta. ele baixa um arquivo. O que mais você quer? - Janus Troelsen
(1) Algum texto para explicar o que é este one-liner, (2) Verifique se a sua resposta não é uma formulação alternativa a uma resposta anterior, uma vez que, se for, ela deve no máximo ser expressa como um comentário sobre essa resposta. - harrymc
Qual versão do Windows e do PowerShell é necessária para que isso funcione? - Peter Mortensen
isso não funciona no Windows Server 2012 FYI, ele lança um MethodInvocationException - knocte


Eu encontrei uma maneira de fazer isso, mas realmente, basta instalar Wget.

Você pode usar o Internet Explorer a partir de uma linha de comando (iexplore.exe) e, em seguida, inserir uma URL como um argumento. Então, corra:

iexplore.exe http://blah.com/filename.zip

Qualquer que seja o arquivo, você precisará especificar que ele não precisa de confirmação antes do tempo. Eis que, executará automaticamente o download. Então sim, é tecnicamente possível, mas bom senhor faça isso de uma maneira diferente.


16



Eu sei que o wget é uma maneira muito melhor, é apenas uma questão hipotética;) Sua resposta chega bem perto, mas ainda requer intervenção do usuário (clicando em "Salvar" ou configurando para não exibir este diálogo) - Robert Massa
Como eu disse, você tem que desmarcar a opção de solicitar para salvar esse tipo de arquivo. Por exemplo, baixe um arquivo zip, desabilite esse prompt e, no futuro, todos os arquivos zip acessados ​​a partir da linha de comando serão salvos automaticamente. - DHayes
+1, embora eu não tenha validado, funciona (mas a afirmação final é muito verdadeira) - Arjan
1 para "querido senhor não faça assim" ... :) - quack quixote


explorador de janelas (não confundir com o Internet Explorer) pode baixar arquivos via HTTP. Basta digitar o URL na barra de endereços. Ou a partir da linha de comando, por exemplo, C:\windows\explorer.exe http://somewhere.com/filename.ext.

Você pega o clássico Download do arquivo pronto. A menos que o arquivo seja do tipo que o Windows Explorer saiba como exibir inline, (.html, .jpg, .gif), nesse caso, você precisará clicar com o botão direito do mouse para salvá-lo.

Eu apenas testei isso no meu VMware imagem de uma instalação virgem do Windows XP 2002 SP1, e funciona bem.


11



isso requer interação do usuário. provavelmente não o que a maioria das pessoas que querem baixar um arquivo a partir do prompt de comando quer - Kip
Hoje em dia, isso depende do seu navegador padrão. O meu é o chrome e faz o download automático para um local conhecido, portanto, considero que essa solução é suficiente para minhas necessidades. THX! - kayleeFrye_onDeck


Você pode usar (em um padrão Windows bat):

powershell -command "& { iwr http://www.it1.net/it1_logo2.jpg -OutFile logo.jpg }"

Parece exigir PowerShell v4 ...

(Graças a esse comentário e este)


6





Use o FTP.

Na linha de comando:

ftp ftp.somesite.com
user
password

FTP está incluído em todas as versões do Windows que me lembro; provavelmente não em 3.1, talvez não em Windows 95, mas certamente tudo depois disso.

@RM: Será difícil se você não quiser fazer o download de outras ferramentas. Existe uma linha de comando Wget para Windows e Wget é projetado para fazer exatamente o que você está pedindo.


5



Uma boa resposta. O ftp é bastante universal, desde que o servidor que você está tentando baixar o suporte. - DaveParillo
Obrigado, desculpe, eu não era mais específico, eu quis dizer usando HTTP. - Robert Massa
Isso não funcionará com a maioria dos servidores FTP, pois o modo passivo não é suportado por este cliente ftp do Windows (é necessário o modo passivo entre NATs). - Peter Mortensen
@ PeterMortensen Ele também não responde remotamente à pergunta, uma vez que ele o editou para especificar que ele estava procurando pela funcionalidade wget. Mas não deixe que isso impeça você de ressuscitar uma resposta errada de 7 anos apenas para adicionar algum pedantismo. - Satanicpuppy


Use o PowerShell assim:

  1. Crie um arquivo download.ps1:

    param($url, $filename)
    $client = new-object System.Net.WebClient 
    $client.DownloadFile( $url, $filename)
    
  2. Agora você pode baixar um arquivo como este:

    powershell Set-ExecutionPolicy Unrestricted
    powershell -ExecutionPolicy RemoteSigned -File "download.ps1" "http://somewhere.com/filename.ext" "d:\filename.ext"
    

3



Isso funciona, mesmo no Windows XP de 64 bits, PowerShell 2.0. - Peter Mortensen


Se você instalar o Telnet, imagino que você poderia fazer uma solicitação HTTP para um servidor para baixar um arquivo.

Você também pode instalar Cygwin, E use wget para baixar um arquivo também. Esta é uma maneira muito fácil de baixar arquivos da linha de comando.


1



Tenho certeza de que 'cygwin' conta como um utilitário não padrão ;-) - DaveParillo
Telnet é uma opção interessante, existe uma maneira de canalizar a saída para um arquivo sem corrompê-lo? E podemos canalizar o comando HTTP GET para o telnet para fazer o pedido? - Robert Massa
Instalar o telnet? Telnet é como ftp; vem com janelas. Não sei redirecionar a saída embora. - Satanicpuppy
Para o XP (como na pergunta) o telnet é instalado por padrão, mas ouvi dizer que no Vista não é mais o caso? Mas não, ele não permite downloads de arquivos, a menos que tudo seja retornado em uma única resposta HTTP, e pode-se despir os cabeçalhos e decodificar as coisas na linha de comando também. É muito improvável que alguém possa controlar isso. - Arjan
Por que instalar o cygwin apenas para usar o wget? Há um binário nativo do win32 disponível. - innaM


Existem algumas maneiras de fazer download usando a linha de comando no Windows:

  1. Você pode usar Cygwin.

    Nota: os aplicativos incluídos não são aplicativos nativos do Linux. Você deve reconstruir seu aplicativo a partir da fonte, se quiser rodar no Windows.

  2. Usando o telnet, é possível fazer uma solicitação, mas você não verá nenhum processamento.

  3. Você pode escrever scripts bat ou VBS.

  4. Escreva seu próprio programa que você pode executar a partir do cmd.exe.


1