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

123

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

A versão preferida é o Windows XP, mas também é interessante saber para versões mais recentes.

Para esclarecer melhor 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, como todo mundo está gritando com o Wget , quero uma funcionalidade simples do Wget, sem usar o Wget.

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

Respostas:

51

Você pode escrever um VBScript e executá-lo na linha de comando

Crie um arquivo downloadfile.vbse 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 na linha de comando da seguinte maneira:

cscript.exe downloadfile.vbs 
phuclv
fonte
1
Gostaria de saber se isso depende do Internet Explorer, mas acho que seria uma boa resposta para "Se o único navegador do Windows estiver morto, como se conectar à Internet?" em superuser.com/questions/50427/… :-)
Arjan
isso é se a permissão para CSCRIPT.EXE é permitido
hello_there_andy
Posso confirmar que testei esse script no Windows PE 5.1 e funcionou como um encanto. Pretendo usá-lo para implantação offline, para verificar a versão da plataforma na unidade USB em relação a um arquivo de texto armazenado no servidor.
Wayfarer 5/05
74

A partir do Windows 7, acredito que há um método único que ainda não foi mencionado e que é fácil:

Sintaxe:

bitsadmin / transfere job_name        / download / prioridade prioritária    URL   local \ path \ file

Exemplo:

bitsadmin / transfere meu trabalho de download / download / prioridade normal ^
                  http://example.com/filename.zip C: \ Users \ nome de usuário \ Downloads \ filename.zip

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

Aviso: Como indicado nos comentários, a bitsadminmensagem 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 informou que funciona no Windows 8.

Mudança de horário
fonte
16
faz parte do windows7.
akira
3
não funcionou no meu Windows 7 ...
JYZ
3
Essa deveria ter sido a resposta mais votada. O bitsadmin foi descontinuado em favor do PowerShell do Windows.
lenkite
3
Confirme o trabalho no Win7
kaiser
7
Nota: O BITSAdmin está obsoleto e não é garantido que esteja disponível em versões futuras do Windows. As ferramentas administrativas para o serviço BITS agora são fornecidas pelos cmdlets do BITS PowerShell.
Ujjwal Singh
39

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

Alternativa nativa ao wget no Windows PowerShell?

user15130
fonte
16
(New-Object Net.WebClient) .DownloadFile ('someurl', 'somepath')
Jason Stangroome
3
Powershell é para Powerrangers ! Como kool é isso e por que diabos eu não sabia disso? Tchau cmd.
kaiser
17
a partir 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
1
Sim, não há nada que você não possa fazer sem o PowerShell. É um tarpit turing verdadeira :)
jcarpenter2
@JanusTroelsen minha versão do PowerShell respondeu "O termo 'iwr' não é reconhecido como o nome de um cmdlet, ..." mas, após alguma investigação, esse processo semelhante funcionou:powershell -command "$clnt = new-object System.Net.WebClient; $clnt.DownloadFile(\"https://host/name\", \"outpufilename\")"
rogerdpack
25

O PowerShell (incluído no Windows 8 e no .NET para versões anteriores) possui esse recurso. O powershellcomando permite executar comandos arbitrários do PowerShell a partir da linha de comando ou de um .batarquivo. Assim, a seguinte linha é o que se deseja:

powershell -command "& { (New-Object Net.WebClient).DownloadFile('http://example.com/', 'c:\somefile') }"
Nik
fonte
2
Isso não fornece uma resposta para a pergunta. Para criticar ou solicitar esclarecimentos a um autor, deixe um comentário abaixo da postagem - você sempre pode comentar em suas próprias postagens e, quando tiver reputação suficiente , poderá comentar em qualquer post .
Harrymc 29/05
3
@harrymc com certeza é uma resposta. ele baixa um arquivo. O que mais você quer?
Janus Troelsen
1
(1) Algum texto para explicar o que essa linha única, (2) Verifique se sua resposta não é uma formulação alternativa a uma resposta anterior, pois se for, ela deve ser expressa no máximo como um comentário sobre essa resposta.
precisa saber é
Qual versão do Windows e do PowerShell é necessária para que isso funcione?
Peter Mortensen
2
isso não funciona no Windows Server 2012 FYI, lança uma MethodInvocationException
knocte
17

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

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

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

Seja qual for o arquivo, você precisará especificar que ele não precisa de confirmação antecipada. Eis que ele fará o download automaticamente. Então, sim, é tecnicamente possível, mas o bom senhor faz isso de uma maneira diferente.

DHayes
fonte
Eu sei wget é uma maneira muito melhor, é apenas uma questão hipotética;) Sua resposta chega bem perto, mas ainda requer a intervenção do usuário (clicando em "Save", ou configurar para não exibir este diálogo)
Robert Massa
3
Como eu disse, você precisa desmarcar a opção para solicitar a salvar para esse tipo de arquivo. Por exemplo, faça o download de um arquivo zip, desative esse prompt e, no futuro, todos os arquivos zip acessados ​​na linha de comando serão salvos automaticamente.
DHayes
1
+1, embora eu não tenha validado funciona (mas a declaração final é muito verdadeiro)
Arjan
1
+1 para "caro senhor não fazê-lo desta forma" ... :)
quack quixote
12

O Windows Explorer (que não deve ser confundido com o Internet Explorer) pode baixar arquivos via HTTP. Basta digitar o URL na barra de endereços. Ou na linha de comando, por exemplo C:\windows\explorer.exe http://somewhere.com/filename.ext,.

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

Acabei de testar isso na minha imagem VMware de uma instalação virgem do Windows XP 2002 SP1 e funciona bem.

Chris Noe
fonte
4
isso requer interação do usuário. provavelmente não o que a maioria das pessoas que querem baixar um arquivo no prompt de comando quer
Kip
Hoje em dia, isso depende do seu navegador padrão. O meu é cromado e é baixado automaticamente para um local conhecido, por isso considero que esta solução é suficiente para minhas necessidades. Valeu!
precisa saber é o seguinte
7

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

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

Parece exigir o PowerShell v4 ...

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

Anthony O.
fonte
6

Use FTP.

Na linha de comando:

ftp ftp.somesite.com
user
password

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

@ RM: Vai ser difícil se você não quiser baixar outras ferramentas. Existe uma linha de comando que o Wget para Windows e o Wget foram projetados para fazer exatamente o que você está pedindo.

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

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"
    
Thomas Jespersen
fonte
Isso funciona, mesmo no Windows XP de 64 bits, PowerShell 2.0.
Peter Mortensen
1

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 o Cygwin e usar o wget para baixar um arquivo também. Essa é uma maneira muito fácil de baixar arquivos da linha de comando.

EvilChookie
fonte
2
Tenho certeza '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 a solicitação?
Robert Massa
Instalar o telnet? Telnet é como ftp; vem com janelas. Porém, não sei como redirecionar a saída.
23610 Satanicpuppy
Para XP (como na pergunta), o telnet é instalado por padrão, mas ouvi dizer que no Vista isso 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 é possível remover os cabeçalhos e decodificar as coisas na linha de comando. Muito improvável que se possa controlar isso.
Arjan #
1
Por que instalar o cygwin apenas para usar o wget? Existe um binário win32 nativo disponível.
innaM 23/10/09
1

Existem algumas maneiras de baixar usando a linha de comando no Windows:

  1. Você pode usar o Cygwin .

    Nota: os aplicativos incluídos não são aplicativos nativos do Linux. Você deve reconstruir seu aplicativo a partir da origem, se desejar executar 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.

Jesus
fonte
1

Você pode instalar o aplicativo Linux Wget no Windows. Pode ser baixado em http://gnuwin32.sourceforge.net/packages/wget.htm . Em seguida, você pode emitir o comando 'wget (inserturlhere)' ou qualquer outro URL no prompt de comando e permitirá fazer o download desse URL / arquivo / imagem.

Peter Mortensen
fonte
1
Estranhamente, esta versão nem sempre é compatível. No meu computador com Windows 7, não era porque estavam faltando bibliotecas. Você gostaria de usar o wget sem nenhuma biblioteca extra na maioria das vezes. users.ugent.be/~bpuype/wget
sinni800
0

No Windows padrão, você não pode fazer o download via HTTP. O Windows é um sistema operacional centralizado em GUI, portanto, faltam muitas das ferramentas de linha de comando que você encontraria em outros sistemas operacionais, como o wgetque seria o candidato principal.

System.Net.WebClient.DownloadFile(), uma função da WiniNetAPI, pode baixar arquivos, mas não sei até que ponto você está entrando no desenvolvimento real em comparação com um arquivo em lotes.

Andrew Scagnelli
fonte
Eu entendo que é possível usar o wget, mas minha pergunta declara sem o uso de utilitários do Windows não padrão.
23710 Robert Massa
0

Se você tem o python instalado, veja um exemplo que busca o arquivo get-pip.py na web

python -c "import urllib; urllib.urlretrieve ('https://bootstrap.pypa.io/get-pip.py', r'C:\python27\Tools\get-pip.py')"
Sipherlab
fonte