Como baixar arquivos da linha de comando no Windows, como wget ou curl

348

Como posso baixar algo da Web diretamente sem o Internet Explorer ou Firefox abrindo o Acrobat Reader / Quicktime / MS Word / o que for?

Estou usando o Windows, então uma versão do Wget para Windows faria.

Peter Mortensen
fonte
Basta clicar com o botão direito do mouse em um arquivo e pressionar "Salvar destino como" ou "Salvar link como" ou "Salvar como" (o idioma varia de acordo com o navegador) funcionará.
BrainSlugs83
25
O objetivo de ter um comando é poder gravar um arquivo em lotes e executá-lo (talvez agendado como uma tarefa) a qualquer momento. É aí que a GUI fica aquém.
Jbm
4
Como você baixa com o MS Word?
Jaime Hablutzel
5
@JaimeHablutzel Por que você gostaria de baixar algo via MS Word? O MS Word não é um terminal.
Braden Best
1
@SDsolar Ou apenas vote / melhore esta resposta abaixo.
Franklin Yu

Respostas:

180

O Wget para Windows deve funcionar.

No FAQ do Wget Wiki :

O GNU Wget é um utilitário de rede gratuito para recuperar arquivos da World Wide Web usando HTTP e FTP, os dois protocolos da Internet mais usados. Ele funciona de maneira não interativa, permitindo assim o trabalho em segundo plano, após o logoff.

A partir desta seção de FAQ , links de download são sugeridas:

Binários do Windows

É utilizado um link com cortesia de Jernej Simončič.

clearkimura
fonte
9
Há também Winwget cybershade.us/winwget se você preferir um gui
Col
13
A versão autônoma pode ser baixada deste link .
Vito Gentile
5
Mais recente, mesmo up-to-date (a partir de hoje) do Windows constrói , desde que por Jernej Simoncic
Gras Duplo
1
@cixelsyd Link atualizado para fonte alternativa.
Clearkimura
1
eternallybored.org/misc/wget/ é sinalizado por antivírus corporativo no meu sistema. Negro de fumo / Bit 9. Provavelmente falso positivo. Mas o sourceforge é executado. Não suporta sslv3.
TamusJRoyce 12/01
311

Uma alternativa que descobri recentemente, usando o PowerShell:

$client = new-object System.Net.WebClient
$client.DownloadFile("http://www.xyz.net/file.txt","C:\tmp\file.txt")

Também funciona com consultas GET.

Se você precisar especificar credenciais para baixar o arquivo, adicione a seguinte linha entre:

$client.Credentials =  Get-Credential                

Um prompt de credenciais padrão do Windows será exibido. As credenciais digitadas serão usadas para baixar o arquivo. Você só precisa fazer isso uma vez para sempre, usando o objeto $ client.

Ubeogesh
fonte
91
Você também pode fazê-lo em uma linha:(new-object System.Net.WebClient).DownloadFile('http://www.xyz.net/file.txt','C:\tmp\file.txt')
schellack 14/10
16
@ Rob PowerShell é construído em para o Windows ...
nhinkle
9
Do Vista para cima, sim.
Arranjo
3
@ BrainSlugs83, absolutamente, mas muitas, muitas pessoas ainda estão usando o XP. É apenas algo a ter em mente.
Arranjo
4
@ BrainSlugs83, você subestima a quantidade de pessoas que ainda estão em sistemas Windows mais antigos. Eu não entendo o problema, apontei que é apenas no Vista para cima. As pessoas podem optar por ignorá-lo ou dizer "ei, obrigado!", Mas você ....? Se você tiver um problema, crie um bate-papo e nós podemos conversar. Alguém com representante (como você) deve perceber que aqui não é o lugar para essa discussão.
Arranjo
83

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

Invoke-WebRequest -OutFile index.html http://superuser.com

Ou jogou golfe

iwr -outf index.html http://superuser.com

Baixe um arquivo via HTTP no Windows

Steven Penny
fonte
Isso não funciona com redirecionamentos no sourceforge (e possivelmente em outros sites), por oposição a System.Net.WebClient. No entanto, você pode fazer o Invoke-WebRequesttrabalho adicionando -UserAgent [Microsoft.PowerShell.Commands.PSUserAgent]::FireFox.
precisa saber é o seguinte
Existe uma opção para ver o andamento do download?
Franklin Yu
@FranklinYu o progresso irá mostrar se o arquivo é grande o suficiente
Steven Penny
Existe uma opção para não especificar um arquivo externo, mas ainda salvar (como wgetou curl -O, curl --remote-nameou curl -J?)
Tomasz Gandor
60

O Windows possui seu próprio utilitário de download de linha de comando - BITSAdmin :

O BITSAdmin é uma ferramenta de linha de comando que você pode usar para criar trabalhos de download ou upload e monitorar seu progresso.

EDIT : 26.01.15 - Aqui está minha visão geral de como um arquivo pode ser baixado no Windows sem ferramentas externas

E um exemplo completo de bitsadmin:

bitsadmin /transfer myDownloadJob /download /priority normal http://downloadsrv/10mb.zip c:\10mb.zip

Edit : 15.05.2018 - acabou sendo possível baixar um arquivo com certutil também :

certutil.exe -urlcache -split -f "https://download.sysinternals.com/files/PSTools.zip" pstools.zip

O Certutil não é instalado por padrão no XP / Win2003, mas está disponível nas versões mais recentes do Windows. Para o XP / 2003, você precisará do Pacote de Ferramentas Administrativas para o Windows Server 2003

npocmaka
fonte
7
Interessante. Esse é um software desajeitado em comparação com o wget.
Matt H
2
Observe que ele não é fornecido com o Windows XP e talvez também não com outras versões.
22712 Ian Dunn
12
Atualização: 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.
Nulldev07 28/09/12
2
@ MatH: porque é suposto ser wget em primeiro lugar? - consulte en.wikipedia.org/wiki/Background_Intelligent_Transfer_Service
peterchen
4
Não foi possível adicionar o arquivo - 0x80070057
Tomáš Zato 26/04
32

Salve o texto a seguir como wget.jse simplesmente chame

cscript /nologo wget.js http://example.com

Este é o código:

var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1");
WinHttpReq.Open("GET", WScript.Arguments(0), /*async=*/false);
WinHttpReq.Send();
WScript.Echo(WinHttpReq.ResponseText);

/* To save a binary file use this code instead of previous line
BinStream = new ActiveXObject("ADODB.Stream");
BinStream.Type = 1;
BinStream.Open();
BinStream.Write(WinHttpReq.ResponseBody);
BinStream.SaveToFile("out.bin");
*/
user190042
fonte
Em que idioma esse script está? Parece útil para minha tarefa atual. Eu gostaria de encontrar mais documentação de referência. Não parece muito com vb
G-.
1
Útil para arquivos únicos. Precisa melhorar para download recursivo e https.
Opticyclic #
4
@ G-. Estou atrasado para a festa, mas isso é JavaScript.
prooffreader
Eu tentei fazer isso por database.clamav.net/daily.cvd , mas baixados apenas 88KB de 44MB :(
kokbira
22

Há um cURL nativo para Windows disponível aqui . Existem muitos tipos disponíveis - com e sem suporte a SSL.

Você não precisa da bagagem extra do Cygwin e coisas do gênero, apenas um pequeno arquivo EXE.


Também é importante saber que há tanto wgete curlaliases construídas em todas as versões modernas de Windows PowerShell. Eles são equivalentes.

Não são necessários arquivos ou downloads extras para obter a wgetfuncionalidade:

Usando Curl In Powershell (o Geek Sociável)

Excerto:

Você pode digitar um comando cURL como aquele que baixa um arquivo de um repositório do GitHub.

curl http://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/mongodb-on-ubuntu/azuredeploy.json

e parece que funciona, mas o que está realmente fazendo é apenas usar cURL como um alias. No exemplo acima, o que acontecerá é que você apenas obterá os cabeçalhos em vez do próprio arquivo.

Os aliases no PowerShell permitem criar atalhos para comandos mais longos, para que você não precise digitá-los o tempo todo.

Se você digitar o comando Get-Alias, ele fornecerá uma lista de todos os aliases usados ​​no PowerShell. Como você pode ver, o comando curl chama apenas o comando Invoke-WebRequest. Eles são semelhantes, mas não são os mesmos, razão pela qual a solicitação acima não funciona para nós.

insira a descrição da imagem aqui

Para que isso funcione corretamente no PowerShell, a maneira mais fácil é usar variáveis ​​e o -OutFileargumento, como mostrado aqui:

insira a descrição da imagem aqui

(nome do arquivo cortado na imagem “ https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/mongodb-on-ubuntu/azuredeploy.json ”)

Essa sintaxe fará o download de todo o conteúdo do arquivo de destino no arquivo azuredeploy.jsonlocalnewfile.json


A principal vantagem é que ele está embutido no próprio Powershell, portanto esse código será executado diretamente sem downloads ou outras criações extras de arquivos são necessárias para fazê-lo funcionar em qualquer versão moderna do Windows.

SDsolar
fonte
Isso é feito diretamente em uma linha, mas a linha fica bastante longa e não é tão legível imediatamente.
SDSolar # 15/17
21

Criei um arquivo myGet.bat rápido que chama o método PowerShell descrito acima.

@Echo OFF
SetLocal EnableDelayedExpansion
Set Var=%1
Set Var=!Var:http://=!
Set Var=!Var:/=,!
Set Var=!Var:%%20=?!
Set Var=!Var: =?!
Call :LOOP !var!
Echo.Downloading: %1 to %~p0!FN!
powershell.exe -Command (new-object System.Net.WebClient).DownloadFile('%1','%~p0!FN!')
GoTo :EOF
:LOOP
If "%1"=="" GoTo :EOF
Set FN=%1
Set FN=!FN:?= !
Shift
GoTo :LOOP

Peguei emprestado algum código da URL de análise para o nome do arquivo com espaço .

MartinC
fonte
1
por que o voto negativo? isso parece bom para mim e é uma resposta direta à pergunta. Sim, é desajeitado e pode usar melhorias, como escapar de e comercial (&) no URL, mas funciona como está.
Matt Wilkie
Não seria mais fácil escrever um script do PowerShell ???
SamB 26/02
1
powershell.exe -Command "Invoke-WebRequest -OutFile ./file-name https://location/file-name"<- Uso simples do PowerShell de uma linha no local de codificação do arquivo de script e no nome do arquivo.
James Eby
8

Eu estava procurando o mesmo e, como não tinha o privilégio de instalar nenhum dos pacotes acima, fiz uma pequena solução alternativa (para baixar mais de 30 arquivos):

  • Eu criei um arquivo em lote
  • Listou todos os arquivos
  • Coloque firefox.exeno início de cada linha
  • Acessou o diretório firefox em Program Files
  • Ran it.
Simon
fonte
4

Se o PowerShell for uma opção, essa é a rota preferida, pois você (potencialmente) não precisará instalar nada extra:

(new-object System.Net.WebClient).DownloadFile('http://www.xyz.net/file.txt', 'C:\tmp\file.tx??t')

Caso contrário, o Wget para Windows, como outros já apontaram, é definitivamente a segunda melhor opção. Conforme publicado em outra resposta, parece que você pode baixar o Wget por si só ou pode fazer o download como parte do Cygwin ou MSys .

Se, por algum motivo, você se encontrar preso em um túnel do tempo, usando uma máquina que não possui o PowerShell e não tenha acesso a um navegador da Web em funcionamento (ou seja, o Internet Explorer é o único navegador no sistema e suas configurações estão corrompidos) e seu arquivo está em um site FTP (ao contrário de HTTP):

start->run "FTP", press "OK".

Se a memória servir, ela existe desde o Windows 98 e posso confirmar que ainda está lá no Windows 8 RTM (pode ser necessário acessar appwiz.cple adicionar / remover recursos para obtê-lo). Este utilitário pode baixar e fazer upload de arquivos de / para sites FTP na web. Também pode ser usado em scripts para automatizar qualquer operação.

Essa ferramenta incorporada me salvou a vida real no passado, especialmente nos dias de ftp.cdrom.com - baixei o Firefox dessa maneira uma vez, em uma máquina completamente quebrada que tinha apenas uma Internet discada conexão (quando o tamanho máximo de pacote do sneakernet ainda era 1,44 MB e o Firefox ainda era chamado de "Netscape" / me faz trollface ).

Algumas dicas: é seu próprio processador de comandos e sua própria sintaxe. Tente digitar "ajuda". Todos os sites FTP exigem um nome de usuário e senha; mas se eles permitem usuários "anônimos", o nome de usuário é "anônimo" e a senha é o seu endereço de e-mail (você pode inventar um se não quiser ser rastreado, mas geralmente existe algum tipo de lógica para garantir que seja um endereço de email válido).

BrainSlugs83
fonte
+1 para pensar em ftp da linha de comando! No entanto, wget e powershell foram mencionados bem antes de você entrar na festa, então -1 está lá. : - /
matt wilkie
As outras respostas do powershell que vi foram todas multi-liners e / ou tinham algum cheiro de código para elas - este é um liner curto e simples para baixar um arquivo. - Também queria fornecer uma resposta que abrangesse todas as bases. :-)
BrainSlugs83
1
Eu não sei por que você tem dois pontos de interrogação no arquivo de destinoC:\tmp\file.tx??t
Ploni
3

Cygwin tem Wget (e muitos mais utilitários).

Rich Homolka
fonte
2

E http://www.httrack.com/ possui uma boa interface gráfica (e é grátis), para espelhar sites. Ele também tem uma versão Linux.

Zsolt Botykai
fonte
2

Você também pode usar o wgetempacotado no PowerShell . ; ^) Para abrir, pressione a tecla Windows e digite "powershell" ou Windows-R e digite "powershell" e pressione Enter.

Nenhuma instalação é necessária.

Uma diferença interessante do convencional wget(mais nesse link ): você não pode simplesmente usar o maior que para canalizar para um arquivo. wgetno PowerShell é apenas um invólucro de conveniência Invoke-WebRequeste você precisa usar sua sintaxe para gravar em um arquivo.

wget https://superuser.com/questions/25538 -OutFile rubySlippers.html
ruffin
fonte
1
-OutFilefez o trabalho!
precisa
1

Você pode obter o WGet for Windows aqui . Como alternativa, você pode clicar com o botão direito do mouse no link de download do item que deseja baixar e escolher Salvar como. Isso fará o download do arquivo e não o abrirá no aplicativo atribuído.

BinaryMisfit
fonte
1

Eu acho que a instalação wgetvia Chocolatey é a maneira mais fácil.

  1. Instalar Chocolatey
  2. Na linha de comando, digite: choco install wget
  3. Você pode usar a wgetpartir da linha de comando, como nos sistemas * nix.
sivabudh
fonte
1

Procure a /downloadfunção em https://lolbas-project.github.io .

Neste momento, existem Bitsadmin.exe, Certutil.exe, Esentutl.exe, Expand.exe, Extrac32.exe, Findstr.exe, Hh.exe, Ieexec.exe, Makecab.exe, Replace.exepara o Windows Vista, Windows 7, Windows 8, o Windows 8.1, Windows 10 e as versões equivalentes Server.

noraj
fonte
0

Se você deseja uma GUI, tente o VisualWget , que está realmente limpo e com todos os recursos. É baseado no GNU Wget para seu mecanismo de download.

EDIT: link atualizado.

Wurlitzer
fonte
1
aqui está um link atualizado: sites.google.com/site/visualwget/... (os downloads estão na parte inferior da página, use as pequenas setas à direita)
Reed Hedges
0

Conforme documentado nesta resposta da SU , você pode usar o seguinte no Powershell:

Import-Module bitstransfer
start-bitstransfer -source http://something/something.ext -destination c:\something.ext
Dolan Antenucci
fonte
-1

Uma alternativa ao uso do gnuwin32 é o unxutils, que inclui o wget.

Chris Chilvers
fonte
você pode gerenciar com unxutils, mas é antigo, usa uma versão antiga do wget. O gnuwin32 é a coisa a se usar. não é tão fácil de instalar e nem fácil de encontrar coisas, mas também tem muito mais do que unxutils.
Barlop #
-3

Se você precisa de uma publicação visual para Windows, aqui está uma.
Você pode postar dados ou arquivos com ele.

WeGoToMars
fonte