所以我目前正在使用wget
windows 10 powershell 上的命令来下载各种文件。但是,在测试此命令时,实际上并未下载文件。
例如,假设我想下载一个图像,比如https://picsum.photos/200,我将使用以下命令:
PS C:\Users\myname\Desktop> wget https://picsum.photos/200
返回一个明显成功的结果:
StatusCode : 200
StatusDescription : OK
Content : {255, 216, 255, 224...}
RawContent : HTTP/1.1 200 OK
Access-Control-Expose-Headers: Content-Length
Content-Disposition: inline;filename=""
Vary: Origin
Access-Control-Allow-Origin: *
X-Content-Type-Options: nosniff
X-XSS-Protection...
Headers : {[Access-Control-Expose-Headers, Content-Length], [Content-Disposition, inline;filename=""],
[Vary, Origin], [Access-Control-Allow-Origin, *]...}
RawContentLength : 31273
Run Code Online (Sandbox Code Playgroud)
此过程完成后,我不会在桌面上观察到任何新文件。
但是,此代码确实有效:
wget https://picsum.photos/200 -O image.jpg
Run Code Online (Sandbox Code Playgroud)
那么发生了什么?为什么wget
单独不下载文件?
roa*_*ima 17
的 Powershell 实现wget
不是wget
. 所以它的行为不像 UNIX/Linux 实用程序wget
。
正如 user4556274所指出的,Powershell 使用wget
和curl
作为其自己的Invoke-WebRequest
.
看看那个(或Get-Help wget
在 Powershell 下运行),可以看到该-O [filename]
标志是可接受的缩写-Output [filename]
,它Invoke-WebRequest [URI]
实际上返回一个表示网页的对象,而不是编写一个以 URL 的基本名称命名的文件。
因此,除非您将其分配给变量或通过管道将其传递给另一个命令,否则这将返回“无”:
wget http://example.net/path/to/page.html
Run Code Online (Sandbox Code Playgroud)
但这会“按预期”提供一个网页:
wget http://example.net/path/to/page.html -O page.html
Run Code Online (Sandbox Code Playgroud)