使用 Windows 中的脚本通过 HTTP 下载文件

使用 Windows 中的脚本通过 HTTP 下载文件

我想要一种方法,通过给定 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# 命令行构建:

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/command-line-building-with-csc-exe

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 上测试过

相关内容