我运行 wget URL,它在 PowerShell 窗口中弹出一个进度条,然后以某些状态(-v 选项)结束,但没有结果文件。
我之前已经看到过关于此问题的多个讨论,有的人说它应该在当前目录中,有的人说它应该在用户主目录中,有的人说它应该在 AppData 下的 VirtualStore 中 - 但这些位置中都没有。
这是 Windows 10,从 PowerShell 命令窗口运行。
我的会话(使用虚假 URL):
PS P:\ftp> wget -v http://mysystem/image.jpg
VERBOSE: GET http://mysystem/image.jpg with 0-byte payload
VERBOSE: received 70544-byte response of content type image/jpeg
StatusCode : 200
StatusDescription : OK
Content : {255, 216, 255, 224...}
RawContent : HTTP/1.1 200 OK
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Accept-Ranges: bytes
Content-Length: 70544
Content-Type: image/jpeg
Date: Sun, 03 Mar 2019 02:09:03 GMT
ETag: "11390-531efc...
Headers : {[Keep-Alive, timeout=5, max=100], [Connection, Keep-Alive], [Accept-Ranges, bytes],
[Content-Length, 70544]...}
RawContentLength : 70544
答案1
我假设 wget 被用作 powershell cmdlet Invoke-WebRequest 的别名。那么这应该可以工作:
wget -v http://mysystem/image.jpg -outfile c:\temp\image.jpg
一些 PS cmdlet 的别名与提供相同功能的 *nix 命令相同,这很好。但有时它会导致混淆,就像这里一样。您在这里没有运行 wget,而是运行 Invoke-WebRequest,它非常相似但不完全相同。
编辑
回复您的评论:您帖子中的代码做下载文件,但将其保存在WebResponseObject
返回的 .content 属性的内存中。甚至可以从返回的对象中保存文件。像这样:
$ret = wget -v http://mysystem/image.jpg
$file = [System.IO.FileStream]::new('C:\temp\image.jpg', [System.IO.FileMode]::Create)
$file.write($ret.Content, 0, $ret.Content.Length)
$file.close()
根据下载的内容,类型$ret.Content
可能会有所不同。上述代码适用于二进制文件。总而言之,使用 -Output 的第一种方法更简单,并为您解决了二进制/文本格式问题。