是否可以使用Windows命令行下载?


123

不使用任何非标准(包括Windows)实用程序,是否可以使用Windows命令行下载?

首选版本是Windows XP,但对于较新的版本也很有趣。

为了进一步阐明我的问题:

  • 它必须使用HTTP
  • 该文件需要保存
  • 标准的干净Windows安装,不需要额外的工具

基本上,既然每个人都在尖叫Wget,那么我想要简单的Wget功能,而不使用Wget。


6
“如果Windows中唯一的浏览器已死,如何连接到Internet?”中的更多想法。在superuser.com/questions/50427/…–
Arjan

在Windows XP的十二个版本中,哪一个是?
Arjan

假设它可以是任何Windows XP SP2版本,并且以后都可以发布。
罗伯特·马萨

@arjan有趣的问题,但仍然没有确定的答案。
罗伯特·马萨

我应该要求“版本”。像Starter,Home,Professional,Media Center,Tablet,甚至甚至是Embedded(我猜那里的工具都有不错的改变!)……或没有Windows Media Player的欧洲版本。:-)
Arjan

Answers:


51

您可以编写一个VBScript并从命令行运行它

创建一个文件downloadfile.vbs并插入以下代码行:

' 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

从命令行运行它,如下所示:

cscript.exe downloadfile.vbs 

1
我想知道这是否依赖于Internet Explorer,但是我猜这将是“如果Windows中唯一的浏览器已死,如何连接到Internet?”的好答案。在superuser.com/questions/50427/… :-)
Arjan

那就是如果允许对cscript.exe的许可
hello_there_andy

我可以确认我已经在Windows PE 5.1中测试了此脚本,并且它的工作原理像个魅力。我打算将其用于脱机部署,以便根据服务器上存储的文本文件检查USB驱动器中平台的版本。
Wayfarer

74

从Windows 7开始,我相信还没有提到一种方法很简单:

句法:

bitsadmin / transfer job_name        / download / priority 优先级   URL   本地\路径\文件

例:

bitsadmin / transfer mydownloadjob / download /优先级正常^
                  http://example.com/filename.zip C:\ Users \ 用户名 \ Downloads \ filename.zip

^为了便于阅读,分为两行,以防止滚动)。

警告:如注释中所指出,bitsadmin帮助消息以以下内容开头:

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.

...但是另一条评论称它可以在Windows 8上运行。


16
它是Windows7的一部分。
akira

3
在我的Windows 7上无法正常工作...
jyz 2012年

3
这应该是最受好评的答案。不过,不建议使用bitsadmin,而希望使用Windows powershell。
lenkite 2012年

3
确认正在Win7上工作
kaiser

7
注意:BITSAdmin已过时,并且不能保证在Windows的将来版本中可用。BITS PowerShell cmdlet现在提供了BITS服务的管理工具。
Ujjwal Singh

39

Windows 7包含PowerShell,您几乎无法使用PowerShell做任何事情。

Windows PowerShell中wget的本机替代品?


16
(New-Object Net.WebClient).DownloadFile('someurl','somepath')
Jason Stangroome

3
Powershell适用于Powerrangers!那是多么的愚蠢,为什么我对此一无所知?再见cmd
kaiser 2012年

16
来自cmd.exe :powershell -command "& { iwr http://www.it1.net/it1_logo2.jpg -OutFile logo.jpg }"。也适用从运行提示
剑锋Troelsen

1
是的,没有PowerShell是您无法做的。这是一个真正的
巡回表演

@JanusTroelsen我的PowerShell版本响应“术语'iwr'不被识别为cmdlet的名称,...”,但经过一些调查,类似的方法起作用:powershell -command "$clnt = new-object System.Net.WebClient; $clnt.DownloadFile(\"https://host/name\", \"outpufilename\")"
rogerdpack 2015年

25

PowerShell(Windows 8附带和早期版本的.NET附带)具有此功能。该powershell命令允许从命令行或.bat文件运行任意PowerShell命令。因此,下面是所需的行:

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

2
这不能为问题提供答案。要批评或要求作者澄清,请在其帖子下方发表评论-您可以随时对自己的帖子发表评论,一旦您拥有足够的声誉,就可以在任何帖子中发表评论
哈里姆克(Harrymc)2014年

3
@harrymc肯定是答案。它下载一个文件。您还想要什么?
Janus Troelsen 2014年

1
(1)一些说明该单行代码的文字,(2)验证您的答案不是先前答案的替代提法,因为如果是,则最多应表示为对该答案的评论。
harrymc 2014年

该软件需要哪个版本的Windows和PowerShell?
Peter Mortensen 2014年

2
这在Windows Server 2012 FYI中不起作用,它将引发MethodInvocationException
knocte

17

我找到了一种方法,但实际上,只需安装Wget即可

您可以从命令行(iexplore.exe)使用Internet Explorer,然后输入URL作为参数。因此,运行:

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

无论文件是什么,您都需要指定它不需要提前确认。瞧瞧,它将自动执行下载。所以是的,这在技术上是可能的,但是好主以不同的方式来做。


我知道wget是一个更好的方法,这只是一个假设的问题;)您的答案非常接近,但仍然需要用户干预(单击“保存”,或配置为不显示此对话框)
Robert Massa 2009年

3
就像我说的那样,您必须取消选择该选项以提示保存该文件类型。例如,下载一个zip文件,禁用该提示,然后将来从命令行访问的所有zip文件将自动保存。
DHayes

1
+1,虽然我尚未验证它是否有效(但最终声明非常正确)
Arjan

1
+1代表“亲爱的主,不要这样行事” ... :)
庸医吉x德09年

12

Windows资源管理器(不要与Internet Explorer混淆)可以通过HTTP下载文件。只需在地址栏中输入URL。或从命令行,例如C:\windows\explorer.exe http://somewhere.com/filename.ext

您会看到经典的文件下载提示。除非文件是Windows资源管理器知道如何内联显示的类型(.html,.jpg,.gif),否则在这种情况下,您需要右键单击以保存它。

我刚刚在Windows XP 2002 SP1的原始安装的VMware映像上对此进行了测试,并且工作正常。


4
这需要用户交互。大多数人可能都不想要从命令提示符下下载文件的人想要的
Kip 2012年

如今,它取决于您的默认浏览器。我的是chrome,它会自动下载到已知位置,因此我认为此解决方案足以满足我的需求。谢谢!
kayleeFrye_onDeck

7

您可以使用(在标准Windows bat中):

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

似乎需要PowerShell v4 ...

(感谢这一评论这一评论


6

使用FTP。

在命令行中:

ftp ftp.somesite.com
user
password

我记得每个Windows版本都包含FTP。可能不在3.1中,也可能不在Windows 95中,但是此后的所有事情都可以。

@RM:如果您不想下载任何其他工具,这将很困难。有一个用于Windows的命令行WgetWget旨在完全满足您的要求。


+1好答案。ftp非常通用,只要您要从中下载的服务器支持它即可。
DaveParillo

谢谢,对不起,我不是更具体,我的意思是使用HTTP。
罗伯特·马萨

1
这不适用于大多数FTP服务器,因为此Windows ftp客户端不支持被动模式(在被动模式之间需要NAT)。
彼得·莫滕森

@PeterMortensen它也无法远程回答问题,因为他对其进行了编辑以指定他正在寻找wget功能。但是,不要因为这样而阻止您复活一个7岁的错误答案,而只是添加一些学步法。
Satanicpuppy

4

像这样使用PowerShell:

  1. 创建一个download.ps1文件:

    param($url, $filename)
    $client = new-object System.Net.WebClient 
    $client.DownloadFile( $url, $filename)
    
  2. 现在,您可以下载如下文件:

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

即使在Windows XP 64位PowerShell 2.0上也可以使用。
彼得·莫滕森

1

如果安装Telnet,我想您可以向服务器发出HTTP请求以下载文件。

您也可以安装Cygwin,也可以使用wget下载文件。这是从命令行下载文件的非常简单的方法。


2
我非常确定'cygwin'被视为非标准实用程序;-)
DaveParillo

Telnet是一个有趣的选项,有没有一种方法可以在不破坏输出的情况下将输出通过管道传输到文件?我们可以将HTTP GET命令通过管道传送到telnet发出请求吗?
罗伯特·马萨

安装telnet?Telnet就像ftp; 它带有窗户。虽然不知道重定向输出。
2009年

对于XP(默认情况下),telnet是默认安装的,但是我听说在Vista上已经不再是这种情况了?但是不,它不允许文件下载,除非所有文件都在单个HTTP响应中返回,并且可以剥离标头并在命令行上解码内容。几乎不可能控制这一点。
Arjan

1
为什么要安装cygwin只是为了使用wget?有一个本地的win32二进制文件可用。
innaM

1

在Windows中,可以使用以下几种方式下载命令行:

  1. 您可以使用Cygwin

    注意:附带的应用程序不是本机Linux应用程序。如果要在Windows上运行,必须从源代码重建应用程序。

  2. 使用telnet可以发出请求,但看不到任何处理。

  3. 您可以编写bat或VBS脚本。

  4. 编写可以从cmd.exe运行的程序。


1

您可以在Windows上安装Linux应用程序Wget。可以从http://gnuwin32.sourceforge.net/packages/wget.htm下载。然后,您可以在命令提示符下发出命令“ wget(在此处插入URL)”或任何其他URL,它将允许您下载该URL /文件/图像。


1
奇怪的是,此版本并非始终兼容。在我的Windows 7计算机上不是因为缺少库。您通常希望在没有任何额外库的情况下使用wget。users.ugent.be/~bpuype/wget
sinni800 2011年


0

在默认Windows中,您无法通过HTTP下载。Windows是一个以GUI为中心的操作系统,因此它缺少您在其他操作系统中可以找到的许多命令行工具,例如wget

System.Net.WebClient.DownloadFile()WiniNetAPI 中的函数,可以下载文件,但是我不确定与批处理文件相比,您进入实际开发的距离有多远。


我知道可以使用wget,但是我的问题是没有使用非标准的Windows utils。
罗伯特·马萨

0

如果您安装了python,请参考以下示例,该示例可从网络上获取get-pip.py

python -c "import urllib; urllib.urlretrieve ('https://bootstrap.pypa.io/get-pip.py', r'C:\python27\Tools\get-pip.py')"
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.