20
2024
02
01:02:07

windows 使用powershell中自带的工具(如wget,WebClient等)下载文件

系统:win10
powershell 版本:5.1(在终端用$psversiontable查看)

wget(Invoke-WebRequest)

windows的powershell中也有跟linux中同名的wget文件下载工具,只不过powershell中的wget是Invoke-WebRequest命令的别名:

# 利用get-alias命令:PS D:\> Get-Alias wget# 输出:CommandType     Name                                               Version    Source-----------     ----                                               -------    ------Alias           wget -> Invoke-WebRequest123456

而且用法也跟linux下的wget不同。如果只是简单的输入命令:

PS D:\> wget https://github.com/lutzroeder/netron/releases/download/v5.7.0/Netron-Setup-5.7.0.exe1

输出的只是解析之后的响应信息以及链接、图像和其他重要 HTML 元素的集合,如:

StatusCode        : 200
StatusDescription : OK
Content           : {77, 90, 144, 0...}RawContent        : HTTP/1.1 200 OK
                    Connection: keep-alive
                    Content-MD5: 4cjz+6tF92ipzKzI992N5w==
                    x-ms-request-id: becf9f72-101e-0065-0f37-4e8c21000000
                    x-ms-version: 2020-04-08
                    x-ms-creation-time: Mon, 11 Apr 2022 01...Headers           : {[Connection, keep-alive], [Content-MD5, 4cjz+6tF92ipzKzI992N5w==], [x-ms-request-id, becf9f72-101e
                    -0065-0f37-4e8c21000000], [x-ms-version, 2020-04-08]...}RawContentLength  : 118186480123456789101112

正确用法:如果要下载文件,需要用命令:
(要注意的是,参数有个是Uri,是Uniform Resource Identifier的缩写,而不是常见的url)

PS D:\> wget -Uri https://github.com/lutzroeder/netron/releases/download/v5.7.0/Netron-Setup-5.7.0.exe -OutFile ./Netron-Setup-5.7.0.exe# -OutFile后面是下载文件保存的位置12

另外,wget还有很多不错的功能,比如,分析一个网页中的所有链接:

PS D:\> (wget -Uri "https://ustc.edu.cn").Links.Href# 会输出:http://wlkt.ustc.edu.cn
http://zsb.ustc.edu.cn
http://aga.ustc.edu.cn/
zxss.htm
http://en.ustc.edu.cn/......12345678

官网文档有更详细的介绍,见参考部分。

附注

如果想要在windows中使用类似linux的wget工具,可以到sourceforge中下载。用法跟linux里的一样

WebClient

简单的使用方法如下:

PS D:\> $download = [System.Net.WebClient]::new()# 或者是:PS D:\> $download = New-Object System.Net.WebClient
然后是下载文件:# 方法是:$download.DownloadFile('path1', 'path2')PS D:\> $download.DownloadFile('https://github.com/apache/tvm/blob/main/README.md', 'd:\readme.md')123456

需要注意的是,这种方法中,路径都需要加上英文符号’或者是",而wget可加可不加;
另外,如果在存储路径,即path2中没有相对路径或者绝对路径的话,会默认下载到用户路径里:c:\users\name

遇到的问题

以上方法有时候下载下来的只是网页信息。比如,从github仓库里下载一个单独的文件,但最后保存的却是整个页面的html信息:

PS D:\> wget -Uri https://github.com/apache/tvm/blob/main/README.md -OutFile readme.md# 或者是:PS D:\> $download.DownloadFile('https://github.com/apache/tvm/blob/main/README.md', 'd:\readme.md')123

这些方法下载下来的虽然名字都是.md格式的文件,但是内容却都是网页信息:

<!DOCTYPE html><html lang="en" data-color-mode="auto" data-light-theme="light" data-dark-theme="dark" >
  <head>
    <meta charset="utf-8">
  <link rel="dns-prefetch" href="https://github.githubassets.com">
  <link rel="dns-prefetch" href="https://avatars.githubusercontent.com">
  <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com">
  <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/">
  <link rel="preconnect" href="https://github.githubassets.com" crossorigin>
  <link rel="preconnect" href="https://avatars.githubusercontent.com">......1234567891011

在下载.onnx格式的文件的时候出现的也是同样的问题。主要是github仓库里面的文件点击之后不会直接下载,而且先有个预览网页,如需下载还要手动点击:
在这里插入图片描述
而且download的链接就是此预览网页的地址,所以最后下载下来的只是此网页的信息。


参考:

microsoft官网文档:Invoke-WebRequest
WebClient Class




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/5184.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: