我想要一种方法,通过给定 URL 的 HTTP 下载文件(类似于 wget 的工作方式)。我已经看到了以下答案这个问题,但我对要求有两处更改:
- 我希望它可以在 Windows 7 或更高版本上运行(但如果它可以在 Windows XP 上运行,那就更好了)。
- 我需要能够在库存机器上仅使用脚本来执行此操作,该脚本应该是可以轻松在键盘上输入或复制/粘贴的文本。
- 越短越好。
因此,本质上,我想要一个 .cmd (批处理)脚本,VB脚本, 或者电源外壳可以完成下载的脚本。它可以使用串口或调用 Internet Explorer,但它需要在没有任何输入的情况下运行,并且在没有显示的情况下调用时应该表现良好(例如通过远程登录会议)。
答案1
如果你有 PowerShell >= 3.0,你可以使用Invoke-WebRequest
:
Invoke-WebRequest -OutFile su.htm -Uri superuser.com
或者打高尔夫球:
iwr -outf su.htm superuser.com
答案2
我会用后台智能传输服务 (BITS)(底漆):
后台智能传输服务 (BITS) 是现代 Microsoft Windows 操作系统的一个组件,它利用空闲网络带宽促进机器之间文件的优先、节流和异步传输。
从 Windows 7 开始,微软建议使用 PowerShell cmdlet对于 BITS。
% import-module bitstransfer
% Start-BitsTransfer http://path/to/file C:\Path\for\local\file
您也可以通过以下方式使用 BITSCOM 对象, 看这里举个例子VB脚本.还有bitsadmin
,一个用于控制下载的命令行工具:
BITSAdmin 是一个命令行工具,您可以使用它来创建下载或上传作业并监控其进度。
在 Windows 7 中,bitsadmin.exe
它本身已声明为弃用工具。尽管如此:
% bitsadmin.exe /transfer "NAME" http://path/to/file C:\Path\for\local\file
答案3
尝试System.Net.WebClient
类。底部有一个示例 PowerShell 脚本这页:
$c = new-object system.net.WebClient
$r = new-object system.io.StreamReader $c.OpenRead("http://superuser.com")
echo $r.ReadToEnd()
答案4
Windows 上有一个实用程序(驻留在 CMD 中),可以从 CMD 运行(如果您具有写权限):
set url=https://www.nsa.org/content/hl-images/2017/02/09/NSA.jpg
set file=file.jpg
certutil -urlcache -split -f %url% %file%
Powershell 中的 cmdlet:
$url = "https://www.nsa.org/content/hl-images/2017/02/09/NSA.jpg"
$file = "file.jpg"
$ProgressPreference = "SilentlyContinue";
Invoke-WebRequest -Uri $url -outfile $file
PowerShell 下的 .Net:
$url = "https://www.nsa.org/content/hl-images/2017/02/09/NSA.jpg"
$file = "file.jpg"
# Add the necessary .NET assembly
Add-Type -AssemblyName System.Net.Http
# Create the HttpClient object
$client = New-Object -TypeName System.Net.Http.Httpclient
$task = $client.GetAsync($url)
$task.wait();
[io.file]::WriteAllBytes($file, $task.Result.Content.ReadAsByteArrayAsync().Result)
使用 csc.exe 进行 C# 命令行构建:
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
namespace DownloadImage
{
class Program
{
static async Task Main(string[] args)
{
using var httpClient = new HttpClient();
var url = "https://www.nsa.org/content/hl-images/2017/02/09/NSA.jpg";
byte[] imageBytes = await httpClient.GetByteArrayAsync(url);
using var fs = new FileStream("file.jpg", FileMode.Create);
fs.Write(imageBytes, 0, imageBytes.Length);
}
}
}
内置 Windows 应用程序。无需外部下载。
在 Win10 上测试过