Jam*_*mes 101 windows scripting batch-file download
我正在尝试使用Windows批处理文件从网站(例如http://www.example.com/package.zip)下载文件.我在编写下面的函数时收到错误代码:
xcopy /E /Y "http://www.example.com/package.zip"
Run Code Online (Sandbox Code Playgroud)
批处理文件似乎不喜欢http之后的"/".有没有办法逃避这些字符,所以它不假设它们是函数参数?
sev*_*rce 118
使用PowerShell 2.0(预装Windows 7),您可以使用:
(New-Object Net.WebClient).DownloadFile('http://www.example.com/package.zip', 'package.zip')
Run Code Online (Sandbox Code Playgroud)
从PowerShell 3.0(预装Windows 8)开始,您可以使用Invoke-WebRequest:
Invoke-WebRequest http://www.example.com/package.zip -OutFile package.zip
Run Code Online (Sandbox Code Playgroud)
从批处理文件中调用它们:
powershell -Command "(New-Object Net.WebClient).DownloadFile('http://www.example.com/package.zip', 'package.zip')"
powershell -Command "Invoke-WebRequest http://www.example.com/package.zip -OutFile package.zip"
Run Code Online (Sandbox Code Playgroud)
(PowerShell 2.0可在XP上安装,3.0适用于Windows 7)
bra*_*ood 93
有一个标准的Windows组件可以实现你想要做的事:BITS.自XP和2000 SP3以来,它已被包含在Windows中.
跑:
bitsadmin.exe /transfer "JobName" http://download.url/here.exe C:\destination\here.exe
Run Code Online (Sandbox Code Playgroud)
作业名称只是下载作业的显示名称 - 将其设置为描述您正在执行的操作的内容.
Dav*_*son 29
这可能有些偏离主题,但您可以使用Powershell轻松下载文件.Powershell附带现代版本的Windows,因此您无需在计算机上安装任何额外的东西.我通过阅读本页了解了如何做到这一点:
http://teusje.wordpress.com/2011/02/19/download-file-with-powershell/
代码是:
$webclient = New-Object System.Net.WebClient
$url = "http://www.example.com/file.txt"
$file = "$pwd\file.txt"
$webclient.DownloadFile($url,$file)
Run Code Online (Sandbox Code Playgroud)
Los*_*ode 25
最后我检查过,没有命令行命令从MS命令行连接到URL.试试wget for Windows:http:
//gnuwin32.sourceforge.net/packages/wget.htm
或URL2文件:http:
//www.chami.com/free/url2file_wincon.html
在Linux中,您可以使用"wget".
或者,您可以尝试VBScript.它们类似于命令行程序,但它们是由wscript.exe脚本宿主解释的脚本.以下是使用VBS下载文件的示例:https:
//serverfault.com/questions/29707/download-file-from-vbscript
Fra*_*ein 15
在PURE BATCH中下载文件...
有些人说不可能在不使用任何JScript或VBScript等的情况下使用批处理脚本下载文件......但它们肯定是错误的!
这是一个简单的方法,似乎可以很好地下载批处理脚本中的文件.它应该在几乎任何文件的URL上工作.如果需要,甚至可以使用代理服务器.
对于下载文件,我们可以使用Windows系统中的BITSADMIN.EXE.无需下载/安装任何内容或使用任何JScript或VBScript等.Bitsadmin.exe存在于大多数Windows版本中,可能是从XP到Windows 10.
请享用!
用法:
您可以直接使用BITSADMIN命令,如下所示:
bitsadmin /transfer mydownloadjob /download /priority normal "http://example.com/File.zip" "C:\Downloads\File.zip"
代理服务器:
要使用代理进行连接,请在下载前使用此命令.
bitsadmin /setproxysettings mydownloadjob OVERRIDE "proxy-server.com:8080" "<local>"
如果您想了解有关BITSadmin.exe的更多信息,请单击此链接
自定义功能
:DOWNLOAD_FILE "URL"
:DOWNLOAD_PROXY_ON "SERVER:PORT"
:DOWNLOAD_PROXY_OFF
我做了这3个函数来简化bitsadmin命令.它更容易使用和记忆.如果您在脚本中多次使用它,它会特别有用.
请注意......
在使用这些函数之前,首先需要将它们从CUSTOM_FUNCTIONS.CMD复制到脚本的末尾.还有一个完整的例子:DOWNLOAD-EXAMPLE.CMD
:DOWNLOAD_FILE"URL"
主要功能,将从URL下载文件.
:DOWNLOAD_PROXY_ON"SERVER:PORT"
(可选)如果需要使用代理服务器,可以使用此功能.
调用:DOWNLOAD_PROXY_OFF函数将禁用它.
例:
CALL :DOWNLOAD_PROXY_ON "proxy-server.com:8080"
CALL :DOWNLOAD_FILE "http://example.com/File.zip" "C:\Downloads\File.zip"
CALL :DOWNLOAD_PROXY_OFF
CUSTOM_FUNCTIONS.CMD
:DOWNLOAD_FILE
rem BITSADMIN COMMAND FOR DOWNLOADING FILES:
bitsadmin /transfer mydownloadjob /download /priority normal %1 %2
GOTO :EOF
:DOWNLOAD_PROXY_ON
rem FUNCTION FOR USING A PROXY SERVER:
bitsadmin /setproxysettings mydownloadjob OVERRIDE %1 "<local>"
GOTO :EOF
:DOWNLOAD_PROXY_OFF
rem FUNCTION FOR STOP USING A PROXY SERVER:
bitsadmin /setproxysettings mydownloadjob NO_PROXY
GOTO :EOF
Run Code Online (Sandbox Code Playgroud)
下载EXAMPLE.CMD
@ECHO OFF
SETLOCAL
rem FOR DOWNLOADING, THIS SCRIPT IS USING THE "BITSADMIN.EXE" SYSTEM FILE.
rem IT IS PRESENT ON MOST WINDOWS VERSION, PROBABLY FROM WINDOWS XP TO WINDOWS 10.
:SETUP
rem DOWNLOADING A PICTURE (URL):
SET "FILE_URL=https://upload.wikimedia.org/wikipedia/en/8/86/Einstein_tongue.jpg"
rem SAVING FILE TO THE SCRIPT FOLDER:
SET "SAVING_TO=Einstein_tongue.jpg"
SET "SAVING_TO=%~dp0%SAVING_TO%"
rem OR, UNCOMMENT NEXT LINE FOR SAVING TO ANY OTHER PATH:
rem SET "SAVING_TO=C:\Folder\Einstein_tongue.jpg"
:MAIN
ECHO.
ECHO FILE URL: "%FILE_URL%"
ECHO SAVING TO: "%SAVING_TO%"
ECHO.
rem UNCOMENT AND MODIFY THE NEXT LINE IF YOU NEED TO USE A PROXY SERVER:
rem CALL :DOWNLOAD_PROXY_ON "PROXY-SERVER.COM:8080"
rem HERE IS THE MAIN DOWNLOADING COMMAND:
CALL :DOWNLOAD_FILE "%FILE_URL%" "%SAVING_TO%"
rem UNCOMMENT NEXT LINE FOR DISABLING ANY PROXY:
rem CALL :DOWNLOAD_PROXY_OFF
ECHO.
rem THIS IS THE END...
PAUSE
EXIT /B
rem FUNCTIONS SECTION
:DOWNLOAD_FILE
rem BITSADMIN COMMAND FOR DOWNLOADING FILES:
bitsadmin /transfer mydownloadjob /download /priority normal %1 %2
GOTO :EOF
:DOWNLOAD_PROXY_ON
rem FUNCTION FOR USING A PROXY SERVER:
bitsadmin /setproxysettings mydownloadjob OVERRIDE %1 "<local>"
GOTO :EOF
:DOWNLOAD_PROXY_OFF
rem FUNCTION FOR STOP USING A PROXY SERVER:
bitsadmin /setproxysettings mydownloadjob NO_PROXY
GOTO :EOF
Run Code Online (Sandbox Code Playgroud)
Kal*_*oni 11
' Create an HTTP object
myURL = "http://www.google.com"
Set objHTTP = CreateObject( "WinHttp.WinHttpRequest.5.1" )
' Download the specified URL
objHTTP.Open "GET", myURL, False
objHTTP.Send
intStatus = objHTTP.Status
If intStatus = 200 Then
WScript.Echo " " & intStatus & " A OK " +myURL
Else
WScript.Echo "OOPS" +myURL
End If
Run Code Online (Sandbox Code Playgroud)
然后
C:\>cscript geturl.vbs
Microsoft (R) Windows Script Host Version 5.7
Copyright (C) Microsoft Corporation. All rights reserved.
200 A OK http://www.google.com
Run Code Online (Sandbox Code Playgroud)
或者只需双击它即可在Windows中进行测试
在 Windows 10 的版本 17063 中添加了 CURL 实用程序。要下载文件,您可以使用:
curl "https://download.sysinternals.com/files/PSTools.zip" --output pstools.zip
Run Code Online (Sandbox Code Playgroud)
将bitsadmin 与宏一起使用会更容易:
set "download=bitsadmin /transfer myDownloadJob /download /priority normal"
%download% "https://download.sysinternals.com/files/PSTools.zip" %cd%\pstools.zip
Run Code Online (Sandbox Code Playgroud)
为了向后兼容,您可以使用winhttpjs.bat(通过它您还可以执行 POST、DELETE 和其他 http 方法):
call winhhtpjs.bat "https://example.com/files/some.zip" -saveTo "c:\somezip.zip"
Run Code Online (Sandbox Code Playgroud)
小智 5
AFAIK,Windows没有内置的命令行工具来下载文件.但您可以从VBScript中执行此操作,并且可以使用echo和输出重定向从批处理生成VBScript文件:
@echo off
rem Windows has no built-in wget or curl, so generate a VBS script to do it:
rem -------------------------------------------------------------------------
set DLOAD_SCRIPT=download.vbs
echo Option Explicit > %DLOAD_SCRIPT%
echo Dim args, http, fileSystem, adoStream, url, target, status >> %DLOAD_SCRIPT%
echo. >> %DLOAD_SCRIPT%
echo Set args = Wscript.Arguments >> %DLOAD_SCRIPT%
echo Set http = CreateObject("WinHttp.WinHttpRequest.5.1") >> %DLOAD_SCRIPT%
echo url = args(0) >> %DLOAD_SCRIPT%
echo target = args(1) >> %DLOAD_SCRIPT%
echo WScript.Echo "Getting '" ^& target ^& "' from '" ^& url ^& "'..." >> %DLOAD_SCRIPT%
echo. >> %DLOAD_SCRIPT%
echo http.Open "GET", url, False >> %DLOAD_SCRIPT%
echo http.Send >> %DLOAD_SCRIPT%
echo status = http.Status >> %DLOAD_SCRIPT%
echo. >> %DLOAD_SCRIPT%
echo If status ^<^> 200 Then >> %DLOAD_SCRIPT%
echo WScript.Echo "FAILED to download: HTTP Status " ^& status >> %DLOAD_SCRIPT%
echo WScript.Quit 1 >> %DLOAD_SCRIPT%
echo End If >> %DLOAD_SCRIPT%
echo. >> %DLOAD_SCRIPT%
echo Set adoStream = CreateObject("ADODB.Stream") >> %DLOAD_SCRIPT%
echo adoStream.Open >> %DLOAD_SCRIPT%
echo adoStream.Type = 1 >> %DLOAD_SCRIPT%
echo adoStream.Write http.ResponseBody >> %DLOAD_SCRIPT%
echo adoStream.Position = 0 >> %DLOAD_SCRIPT%
echo. >> %DLOAD_SCRIPT%
echo Set fileSystem = CreateObject("Scripting.FileSystemObject") >> %DLOAD_SCRIPT%
echo If fileSystem.FileExists(target) Then fileSystem.DeleteFile target >> %DLOAD_SCRIPT%
echo adoStream.SaveToFile target >> %DLOAD_SCRIPT%
echo adoStream.Close >> %DLOAD_SCRIPT%
echo. >> %DLOAD_SCRIPT%
rem -------------------------------------------------------------------------
cscript //Nologo %DLOAD_SCRIPT% http://example.com targetPathAndFile.html
Run Code Online (Sandbox Code Playgroud)
这里有更多解释
您不能通过 http 使用 xcopy。尝试下载 Windows 版 wget。这可能会起作用。它是一个命令行实用程序,用于通过 http 非交互式下载文件。您可以在http://gnuwin32.sourceforge.net/packages/wget.htm获取它
| 归档时间: |
|
| 查看次数: |
409964 次 |
| 最近记录: |