.net 如何在不使用任何外部工具的情况下下载带有批处理文件的文件?
首先澄清这个问题是针对HTTP(s)下载的。对于FTP可能是,我会问(并回答)另一个问题。 这里有——但我想说得更准确些 除了排除外部工具之外,我希望解决方案适用于尽可能广泛的windows机器类型(包括XP、Win2003、Vista,它们仍然有足够大的份额)。 另外,由于.net 如何在不使用任何外部工具的情况下下载带有批处理文件的文件?,.net,jscript,wsh,batch-file,.net,Jscript,Wsh,Batch File,首先澄清这个问题是针对HTTP(s)下载的。对于FTP可能是,我会问(并回答)另一个问题。 这里有——但我想说得更准确些 除了排除外部工具之外,我希望解决方案适用于尽可能广泛的windows机器类型(包括XP、Win2003、Vista,它们仍然有足够大的份额)。 另外,由于WSH是一个可能的选项,我不希望使用临时文件,所有内容都打包在一个.bat文件中(jscript和vbscript都可以) 可能的方法是什么 带有命令行实用程序的“纯”批处理解决方案 在每台windows计算机上都可以使用。
WSH
是一个可能的选项,我不希望使用临时文件,所有内容都打包在一个.bat
文件中(jscript和vbscript都可以)
可能的方法是什么
System.Web.HttpRequest,但现在我只发布 System.Net.WebClient解决方案。以及更多相同的ActiveX对象 WSH也可以在这里访问。所以有很多 使用.Net加载文件的方法。可能在将来我会更新 我的回答。无论如何,只有Webclient是专门为下载而设计的
答案。所有脚本应使用
.bat
/.cmd
扩展名保存,并可直接用作批处理脚本
set "download=certutil.exe -urlcache -split -f"
%download% "https://download.sysinternals.com/files/PSTools.zip" pstools.zip
可以滥用命令从internet下载文件。从Vista开始,默认情况下在windows中可用。对于WinXP Server 2003,需要管理工具
bitsadmin /transfer myDownloadJob /download /priority normal http://downloadsrv/10mb.zip c:\10mb.zip
使用宏:
set "dnld=bitsadmin /transfer myDownloadJob /download /priority normal"
%dnld% "https://download.sysinternals.com/files/PSTools.zip" %cd%\pstools.zip
或与
$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)
C#使用csc.exe生成命令行:内置Windows应用程序。不需要外部下载
在Win 10上测试能否使用
bitsadmin
下载网页上的每个文件?@WSH JScript存在多个问题WScript
区分大小写,-saveTo用作未命名的参数,XMLHTTPObj
有时会错卖WinHTTPObj
。我还建议您使用WScript.ScriptName
简化直接的cscript调用。不要忘记powershell命令(新对象Net.WebClient)。DownloadFile('Source,Dest')
。适用于powershell v2,未测试v1。这是唯一一个可以在操作系统上下载文件的脚本,PS&CMD的值太低了。@npocmaka嗨,那么,谁能从文件中只得到最后修改的日期,而不是下载答案/代码?无论如何,对不起,我的。我发现我需要/dynamic
开关。例如:bitsadmin/transfer myDownloadJob/dynamic/download/priority前台https://github.com/microsoft/vscode-cpptools/releases/latest/download/cpptools-win32.vsix %USERPROFILE%\Downloads\cpptools-win32.vsix
谢谢。certutil的问题是新的。现在它被检测为一个线程。Certutil
在病毒滥用它下载exe、pif、vbs和bat文件后,默认情况下,写入权限现在只授予TrustedInstaller。与cURL
和BitsAdmin
相比,certutil
有什么优势?您还可以使用它们下载内容…certutil
用于证书、pfx文件、加密密钥、注册表、根目录、active directory、策略、缓存、数据库、编码文件(以避免被防病毒检测),除了下载文件和证书,因此可能是病毒和恶意软件的流行选择,以避免进一步检测,certutil
还可以在普通文件的备用数据流中隐藏可执行文件,例如trustme.txt
call webclientDownload.bat "https://download.sysinternals.com/files/PSTools.zip" pstools.zip
set url=https://www.nsa.org/content/hl-images/2017/02/09/NSA.jpg
set file=file.jpg
certutil -urlcache -split -f %url% %file%
:also certutil.exe -verifyctl -f -split %url% %file%
$url = "https://www.nsa.org/content/hl-images/2017/02/09/NSA.jpg"
$file = "file.jpg"
$ProgressPreference = "SilentlyContinue";
Invoke-WebRequest -Uri $url -outfile $file
$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)
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);
}
}
}