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

Pao*_*sco 430 windows wget curl

如何在没有 Internet Explorer 或 Firefox 打开 Acrobat Reader/Quicktime/MS Word/什么的情况下直接从网络下载内容?

我使用的是 Windows,所以 Windows 版本的Wget就可以了。

Pao*_*sco 355

我最近发现的一个替代方案,使用 PowerShell:

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

它也适用于 GET 查询。

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

$client.Credentials =  Get-Credential                
Run Code Online (Sandbox Code Playgroud)

将弹出标准 Windows 凭据提示。您在那里输入的凭据将用于下载文件。在您将使用 $client 对象的所有时间里,您只需要执行一次此操作。

  • 您也可以在一行中完成:`(new-object System.Net.WebClient).DownloadFile('http://www.xyz.net/file.txt','C:\tmp\file.txt' )` (101认同)
  • @Rob powershell 内置于 Windows ... (16认同)
  • 从 Vista 开始,是的。 (10认同)
  • @BrainSlugs83,您低估了仍使用旧版 Windows 系统的人数。我不明白这个问题,我指出它只在 Vista 上。人们可以选择忽略它,或者说“嘿,谢谢!”,但是你......?如果您有问题,请创建聊天,我们可以交谈。有代表的人(像你一样)应该意识到*这里*不是这个讨论的地方。 (4认同)
  • @BrainSlugs83,绝对,但很多,*很多*,人们仍在使用 XP。这只是需要记住的事情。 (3认同)
  • 我只是指出澄清有点愚蠢,因为只要它存在,它就被内置到 Windows 中——并且所有当前支持的 Windows 版本都内置了它。没有进一步的了。 (2认同)
  • 我不确定这是否在某些版本的 Powershell 中发生了变化,但是您不能为 DownloadFile 的第二个参数指定路径(您只能指定文件名)。因此,如果上述方法对您不起作用,请尝试:`(new-object System.Net.WebClient).DownloadFile('http://www.example.net/file.‌ txt','file.tx‌ t' )` (2认同)

小智 208

Wget for Windows应该可以工作。

来自Wget Wiki 常见问题解答

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

FAQ 的这一部分,建议下载链接:

Windows 二进制文件

链接由 Jernej Simon 提供?我?改为使用。

  • 独立版本可从 [此链接](http://users.ugent.be/~bpuype/wget/) 下载。 (14认同)
  • 如果您更喜欢 gui,还有 Winwget http://www.cybershade.us/winwget/ (9认同)
  • 最近,甚至是最新的(截至今天)[Windows 构建](https://eternallybored.org/misc/wget/),由 Jernej Simončič 提供 (5认同)
  • everlybored.org/misc/wget/ 在我的系统上被企业防病毒标记。炭黑/位 9。可能是误报。但是 sourceforge 一个运行。不支持 sslv3。 (2认同)

Ste*_*nny 138

卷曲

Windows 10 包括curl.exe

https://techcommunity.microsoft.com/t5/containers/-/ba-p/382409

所以你可以做这样的事情:

# example 1
curl.exe --output index.html --url https://superuser.com
# example 2
curl.exe -o index.html https://superuser.com
Run Code Online (Sandbox Code Playgroud)

如果您使用的是较旧的 Windows,您仍然可以下载它:

https://curl.haxx.se/windows

电源外壳

# example 1
Invoke-WebRequest -OutFile index.html -Uri https://superuser.com
# example 2
iwr -outf index.html https://superuser.com
Run Code Online (Sandbox Code Playgroud)

https://docs.microsoft.com/powershell/module/microsoft.powershell.utility/invoke-webrequest


npo*_*aka 72

可以使用 certutil 下载文件

certutil.exe -urlcache -split -f "https://download.sysinternals.com/files/PSTools.zip" pstools.zip
Run Code Online (Sandbox Code Playgroud)

默认情况下,XP/Win2003 上未安装 Certutil,但可在较新的 Windows 版本上安装。对于 XP/2003,您需要Windows Server 2003管理工具包


旧答案:

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

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

这是我如何在没有外部工具的情况下在 Windows 上下载文件的概述

以及一个完整的 bitsadmin 示例:

bitsadmin /transfer myDownloadJob /download /priority normal http://downloadsrv/10mb.zip c:\10mb.zip
Run Code Online (Sandbox Code Playgroud)

  • 更新: BITSAdmin 已弃用,不保证在未来版本的 Windows 中可用。BITS 服务的管理工具现在由 BITS PowerShell cmdlet 提供。 (12认同)
  • 有趣的。与 wget 相比,这是一款笨拙的软件。 (7认同)
  • 无法添加文件 - 0x80070057 (4认同)
  • 请注意,它不随 Windows XP 一起提供,也可能不随其他版本一起提供。 (2认同)
  • @MattH:因为首先不应该是 wget 吗?- 见 http://en.wikipedia.org/wiki/Background_Intelligent_Transfer_Service (2认同)

小智 34

将以下文本另存为wget.js并简单地调用

cscript /nologo wget.js http://example.com
Run Code Online (Sandbox Code Playgroud)

这是代码:

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");
*/
Run Code Online (Sandbox Code Playgroud)

  • @G-。我迟到了,但那是 JavaScript。 (4认同)

小智 25

我创建了一个快速的 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
Run Code Online (Sandbox Code Playgroud)

我从Parsing URL for filename with space借用了一些代码。

  • `powershell.exe -Command "Invoke-WebRequest -OutFile ./file-name https://location/file-name"` <-- 脚本文件硬编码位置和文件名中的简单一行 powershell 用法。 (2认同)

Gau*_*mar 23

有一个用于Windows提供原生卷曲这里。有许多可用的风格 - 有和没有 SSL 支持。

你不需要Cygwin之类的额外包袱,只需要一个小的 EXE 文件。


了解Windows Powershell 的所有现代版本中都内置了别名wgetcurl别名也很重要。它们是等价的。

无需额外的文件或下载即可获得wget功能:

在 Powershell 中使用 Curl(社交极客)

摘抄:

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

curl 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 上工作。


小智 9

我正在寻找相同的,因为我没有安装上述任何软件包的特权,所以我选择了一个小的解决方法(下载 30 多个文件):

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


ruf*_*fin 7

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

无需安装。

与传统的一个有趣的区别wget(更多在那个链接):您不能简单地使用大于号来管道到文件。wget在 PowerShell 中只是一个方便的包装器Invoke-WebRequest,你需要使用它的语法来写入文件。

wget https://superuser.com/questions/25538 -OutFile rubySlippers.html
Run Code Online (Sandbox Code Playgroud)


nor*_*raj 6

在https://lolbas-project.github.io上搜索/download函数。

目前有Bitsadmin.exeCertutil.exeEsentutl.exeExpand.exe, Extrac32.exeFindstr.exeHh.exeIeexec.exeMakecab.exeReplace.exe适用于 Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 10 和等效的服务器版本。


Bra*_*s83 5

如果PowerShell是一个选项,那是首选路线,因为您(可能)不必安装任何额外的东西:

(new-object System.Net.WebClient).DownloadFile('http://www.example.com/file.txt', 'C:\tmp\file.txt')
Run Code Online (Sandbox Code Playgroud)

否则,Wget for Windows,正如其他人指出的那样,绝对是第二好的选择。正如在另一个答案中发布的那样,您似乎可以自己下载 Wget,也可以将其作为CygwinMSys的一部分获取。

如果由于某种原因,您发现自己陷入了时间扭曲,使用没有 PowerShell 的机器并且您对工作的 Web 浏览器的访问权限为零(也就是说,Internet Explorer 是系统上唯一的浏览器,它的设置已损坏),并且您的文件位于 FTP 站点上(而不是 HTTP):

start->run "FTP", press "OK".
Run Code Online (Sandbox Code Playgroud)

如果没记错的话,它自 Windows 98 以来就一直存在,我可以确认它在 Windows 8 RTM 中仍然存在(您可能必须进入appwiz.cpl并添加/删除功能才能获得它)。此实用程序可以从网络上的 FTP 站点下载和上传文件。它还可以在脚本中使用以自动执行任一操作。

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

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

  • 我不知道为什么你在目标文件“C:\tmp\file.tx??t”中有两个问号 (2认同)