如何从Windows中的命令行(如wget或curl)下载文件


348

如何在没有Internet Explorer或Firefox打开Acrobat Reader / Quicktime / MS Word /任何文件的情况下直接从Web下载内容?

我使用的是Windows,因此Windows版本的Wget可以使用。


只需右键单击文件,然后单击“目标另存为”或“链接另存为”或“另存为”(语言因浏览器而异)即可。
BrainSlugs83

25
使用命令的目的是能够随时编写批处理文件并运行它(可能是作为任务计划的)。这就是GUI不足的地方。
Jbm 2012年

4
如何使用MS Word下载?
Jaime Hablutzel 2014年

5
@JaimeHablutzel您为什么要通过MS Word下载某些内容?MS Word不是终端。
布雷登·贝斯特

1
@SDsolar或只是在下面投票/改善此答案
富兰克林·于

Answers:


180

Windows的Wget应该可以工作。

Wget Wiki常见问题解答

GNU Wget是一个免费的网络实用程序,可以使用HTTP和FTP(这两种使用最广泛的Internet协议)从万维网检索文件。它以非交互方式工作,因此在注销后可以在后台进行工作。

常见问题解答的这一部分,建议下载链接:

Windows二进制文件

而是使用JernejSimončič提供的链接。


9
如果您更喜欢gui,也可以使用Winwget cybershade.us/winwget
上校

13
可从此链接下载独立版本。
维托外邦人

5
由JernejSimončič提供的更新的Windows版本(截至今天)
Gras Double

1
@cixelsyd已更新链接到替代源。
clearkimura

1
eternallybored.org/misc/wget/在我的系统上被企业防病毒标记。炭黑/位9。可能是假阳性。但是sourceforge一个运行。不支持sslv3。
TamusJRoyce

311

我最近发现使用PowerShell的另一种方法:

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

它与GET查询配合使用。

如果您需要指定凭据来下载文件,请在两者之间添加以下行:

$client.Credentials =  Get-Credential                

将会弹出一个标准的Windows凭据提示。您在此处输入的凭据将用于下载文件。使用$ client对象时,只需要一直执行一次即可。


91
您也可以单行执行:(new-object System.Net.WebClient).DownloadFile('http://www.xyz.net/file.txt','C:\tmp\file.txt')
schellack 2011年

16
@Rob powershell内置于Windows中...
nhinkle

9
从Vista开始,是的。
阿兰(Arran)2012年

3
@ BrainSlugs83,绝对,但是很多很多人仍在使用XP。这只是要记住的事情。
阿兰(Arran)

4
@ BrainSlugs83,您低估了仍在旧Windows系统上的人数。我不明白这个问题,我指出这仅适用于Vista以上版本。人们可以选择忽略它,或者说“嘿,谢谢!”,但是你……。如果您有问题,请进行聊天,我们可以进行交谈。代表rep的人(例如您)应该意识到这里不是进行此讨论的地方。
阿兰(Arran)2013年

83

如果您的PowerShell> = 3.0,则可以使用 Invoke-WebRequest

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

或打高尔夫球

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

在Windows中通过HTTP下载文件


相对于,该功能不适用于sourceforge(可能还有其他网站)上的重定向System.Net.WebClient。但是,您可以Invoke-WebRequest通过添加进行工作-UserAgent [Microsoft.PowerShell.Commands.PSUserAgent]::FireFox
Ela782 '16

是否可以查看下载进度?
富兰克林·于

@FranklinYu进度将显示文件是否足够大
Steven Penny

是否有一个选项,不指定OUTFILE,但仍保存(如wgetcurl -Ocurl --remote-namecurl -J?)
托马斯Gandor

60

Windows有其自己的命令行下载实用程序-BITSAdmin

BITSAdmin是一个命令行工具,可用于创建下载或上传作业并监视其进度。

编辑15年1月26日 - 这是我的概述如何无需外部工具即可在Windows上下载文件

还有一个完整的bitsadmin示例:

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

编辑15.05.2018-事实证明也可以使用certutil下载文件

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

XP / Win2003默认未安装Certutil,但在Windows新版本中可用。对于 XP / 2003,您需要Windows Server 2003管理工具包


7
有趣。与wget相比,这是一个笨拙的软件。
马特H

2
请注意,它不是Windows XP附带的,也可能不是其他版本附带的。
伊恩·邓恩

12
更新:BITSAdmin已过时,并且不能保证在Windows的将来版本中可用。BITS PowerShell cmdlet现在提供了BITS服务的管理工具。
nulldev07 2012年

2
@MattH:因为一开始就不需要wget吗?-请参阅en.wikipedia.org/wiki/Background_Intelligent_Transfer_Service
13年

4
无法添加文件- 80070057
托马什Zato

32

将以下文本另存为wget.js,只需调用

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

这是代码:

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");
*/

该脚本使用哪种语言?对我当前的任务很有用。我想找到更多参考文档。看起来不太像vb
G-。

1
对于单个文件有用。需要增强递归下载和https。
opticyclic

4
@G-。我参加聚会很晚,但这就是JavaScript。
2015年

我试图为database.clamav.net/daily.cvd做到这一点,但它仅下载了44MB的
88kB

22

有一个用于Windows提供原生卷曲这里。有很多可用的样式-支持和不支持SSL。

您不需要Cygwin之类的多余包,,只需一个小的EXE文件。


同样重要的是要知道,Windows Powershell的所有现代版本都内置了wgetcurl别名。它们是等效的。

无需其他文件或下载即可获得wget功能:

在Powershell中使用Curl(The Sociable Geek)

摘抄:

您可以键入一个cURL命令,例如从GitHub存储库下载文件的命令。

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

看起来好像可行,但实际上只是使用cURL作为别名。在上面的例子中,将发生的是您将仅获取标头而不是文件本身。

PowerShell中的别名允许您为更长的命令创建快捷方式,因此您不必一直输入它们。

如果键入命令Get-Alias,它将为您提供PowerShell中使用的所有别名的列表。如您所见,curl命令仅调用Invoke-WebRequest命令。它们相似但不相同,因此上述要求对我们不起作用。

在此处输入图片说明

为了使它在PowerShell中正常工作,最简单的方法是使用变量和-OutFile参数,如下所示:

在此处输入图片说明

(文件名在图像中被截断“ https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/mongodb-on-ubuntu/azuredeploy.json ”)

此语法会将目标文件的全部内容下载azuredeploy.json到本地文件newfile.json


主要优点是它内置在Powershell本身中,因此该代码无需下载即可直接执行,或者需要任何其他额外的文件创建才能使其在任何现代版本的Windows上运行。


可以直接在一行上完成此操作,但是该行会很长,一眼就无法立即读取。
SDsolar

21

我制作了一个快速的myGet.bat文件,该文件调用了上述的PowerShell方法。

@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

我从解析URL借了一些代码来获取带空格的文件名


1
为什么要下票?这在我看来还可以,是对问题的直接回应。是的,它笨拙,可以使用改进,例如在网址中转义“&”号,但它仍然可以正常工作。
马特·威尔基

只编写PowerShell脚本会不会更容易???
SamB

1
powershell.exe -Command "Invoke-WebRequest -OutFile ./file-name https://location/file-name"<-在脚本文件硬编码位置和文件名中使用简单的一行powershell。
詹姆斯·埃比

8

我一直在寻找相同的产品,并且由于没有特权安装上述任何软件包,因此我寻求了一个小解决方法(下载30多个文件):

  • 我创建了一个批处理文件
  • 列出所有文件
  • 放在firefox.exe每行的开头
  • 转到目录中的firefox目录 Program Files
  • 跑吧

4

如果可以使用PowerShell,则这是首选的方法,因为您(可能)无需安装任何额外的东西:

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

失败的是,正如其他人指出的,Windows的Wget绝对是第二好的选择。如另一个答案中所述,您似乎可以单独下载Wget,也可以将其作为CygwinMSys的一部分来获取。

如果由于某种原因,你会发现自己被困在一个时间隧道,使用不具有PowerShell的一台机器你有零访问工作网络浏览器(即Internet Explorer的系统上唯一的浏览器,它的设置已损坏),并且您的文件位于FTP站点上(而不是HTTP):

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

如果有足够的内存,它从Windows 98开始就已经存在,并且我可以确认它在Windows 8 RTM中仍然存在(您可能必须进入appwiz.cpl并添加/删除功能才能获得它)。此实用程序既可以在Web上的FTP站点上下载文件,也可以从上载文件到FTP站点。也可以在脚本中使用它来自动执行任一操作。

过去,内置的此工具对我来说是一个真正的救星,尤其是在ftp.cdrom.com的时代-我曾经在完全损坏的只有拨号Internet的机器上以这种方式下载Firefox连接(当sneakernet的最大数据包大小仍为1.44 MB,并且Firefox仍被称为“ Netscape” / me时,返回trollface)。

一些提示:它是自己的命令处理器,并且具有自己的语法。尝试输入“帮助”。所有FTP站点都需要用户名和密码。但是如果他们允许“匿名”用户,则用户名是“匿名”,密码是您的电子邮件地址(如果您不想被跟踪,可以补上一个,但是通常会有某种逻辑来确保它是有效的电子邮件地址)。


+1考虑命令行ftp!但是wget和powershell都在您加入该聚会之前就被很好地提及过,所以在那里-1。:-/
马特·威尔基

我看到的其他powershell答案都是多行代码和/或有一些代码味道-这是下载文件的简短简单代码。-我也想提供一个涵盖所有基础的答案。:-)
BrainSlugs83 '16

1
我不确定为什么您在目标文件中有两个问号C:\tmp\file.tx??t
Ploni



2

您也可以使用wgetPowerShell中打包的软件包。; ^)要打开,请按Windows键并键入“ powershell”或Windows-R,然后键入“ powershell”并按回车键。

无需安装。

从传统的一个有趣的差异wget(更在该链接):你不能简单地用它来管的,大于一个文件。wget在PowerShell中,它只是的便捷包装Invoke-WebRequest,您需要使用其语法来写入文件。

wget https://superuser.com/questions/25538 -OutFile rubySlippers.html

1
-OutFile做好了!
Dimitry K

1

您可以在此处获取Windows的WGet 。或者,您可以右键单击要下载的项目的下载链接,然后选择另存为。这将下载文件,而不会在分配的应用程序中打开它。


1

我认为wget通过Chocolatey 安装是最简单的方法。

  1. 安装Chocolatey
  2. 在命令行中,输入: choco install wget
  3. 然后,您可以wget在* nix系统上从命令行使用。

1

/downloadhttps://lolbas-project.github.io上搜索功能。

现在有Bitsadmin.exeCertutil.exeEsentutl.exeExpand.exe, Extrac32.exeFindstr.exeHh.exeIeexec.exeMakecab.exeReplace.exe适用于Windows Vista中,Windows 7,Windows 8中的Windows 8.1时,Windows 10和对应的服务器版本。




-1

使用gnuwin32的替代方法是unxutils,其中包括wget。


您可以使用unxutils进行管理,但是它很旧,它使用了旧版本的wget。gnuwin32是要使用的东西。虽然安装起来不太方便,查找起来也不太方便,但是它比unxutils还具有更多功能。
barlop 2011年

-3

如果您需要Windows 的可视化帖子,这里是一个。
您可以使用它发布数据或文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.