在 Windows 10 上找不到 Wget 的输出

gut*_*rie 5 windows powershell wget

我运行 wget URL,它在 PowerShell 窗口中提供一个弹出进度条,然后以某种状态(-v 选项)结束,但没有结果文件。

我之前已经看到过多次关于此的讨论,有些说它应该在当前目录中,有些在用户主目录中,有些在 AppData 下的 VirtualStore - 但在这些位置中的任何一个都没有。

这是从 PowerShell 命令窗口运行的 Windows 10。

我的会话(使用假 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
Run Code Online (Sandbox Code Playgroud)

Ger*_*eld 7

我假设 wget 用作 powershell cmdlet Invoke-WebRequest 的别名。那么这应该工作:

wget -v  http://mysystem/image.jpg -outfile c:\temp\image.jpg
Run Code Online (Sandbox Code Playgroud)

很高兴某些 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()
Run Code Online (Sandbox Code Playgroud)

根据下载的内容,类型$ret.Content可能会有所不同。上面的代码适用于二进制文件。总而言之,使用 -Output 的第一种方法更容易,并且可以为您解决二进制/文本格式问题。

  • powershell 中的 wget 别名是 Microsoft 放置的,还有其他别名,如 ls、curl、chdir、cp 等。它们优先于路径中的命令,就像您的情况一样。可以删除别名。可以通过指定路径(如“c:\bin\wget.exe”)来调用外部命令 (2认同)