我正在尝试使用Windows批处理文件从网站(例如http://www.example.com/package.zip)下载文件。在编写以下函数时,我遇到了一个错误代码:
xcopy /E /Y "http://www.example.com/package.zip"
批处理文件似乎不喜欢 http 后面的“/”字符。 有没有一些方法可以转义这些字符,以便它不会将其视为函数参数?
我正在尝试使用Windows批处理文件从网站(例如http://www.example.com/package.zip)下载文件。在编写以下函数时,我遇到了一个错误代码:
xcopy /E /Y "http://www.example.com/package.zip"
批处理文件似乎不喜欢 http 后面的“/”字符。 有没有一些方法可以转义这些字符,以便它不会将其视为函数参数?
使用 PowerShell 2.0 (预装于 Windows 7 中), 您可以使用以下命令:
(New-Object Net.WebClient).DownloadFile('http://www.example.com/package.zip', 'package.zip')
从PowerShell 3.0开始(预装于Windows 8),您可以使用Invoke-WebRequest
命令:
Invoke-WebRequest http://www.example.com/package.zip -OutFile package.zip
它们可以从批处理文件中调用:
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"
(PowerShell 2.0 可在 XP 上安装,3.0 可在 Windows 7 上安装)
.bat
和.ps1
文件确实会捣乱你的东西。 - user1934286有一个标准的Windows组件可以实现您想要做的事情:BITS。它自XP和2000 SP3以来已经包含在Windows中。
运行:
bitsadmin.exe /transfer "JobName" http://download.url/here.exe C:\destination\here.exe
bitsadmin
在 Windows XP Home Edition 中不可用。 - cascading-style这可能与主题有些偏离,但你可以使用 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)
System.Net.WebClient
中不需要使用 System
。 - user1934286据我所知,Microsoft命令行中没有连接到URL的命令。在Windows中尝试使用wget:
http://gnuwin32.sourceforge.net/packages/wget.htm
或者使用URL2File:
http://www.chami.com/free/url2file_wincon.html
在Linux中,您可以使用 "wget"。
另外,您可以尝试使用VBScript。它们类似于命令行程序,但是它们是由wscript.exe脚本主机解释的脚本。以下是使用VBS下载文件的示例:
https://serverfault.com/questions/29707/download-file-from-vbscript
有些人说,使用批处理脚本下载文件而不使用任何JScript或VBScript等是不可能的... 但他们绝对错了!
这里有一种简单的方法,在批处理脚本中似乎非常有效地下载文件。它应该适用于几乎任何文件的URL。如果需要,甚至可以使用代理服务器。
为了下载文件,我们可以使用Windows系统中的BITSADMIN.EXE。无需下载/安装任何东西,也不需要使用任何JScript或VBScript等。 Bitsadmin.exe 在大多数Windows版本上都存在,可能从XP到Windows 11。
尽情享受吧!
用法:
您可以直接使用BITSADMIN命令,如下所示:
bitsadmin /transfer mydownloadjob /download /priority FOREGROUND "http://example.com/File.zip" "C:\Downloads\File.zip"
代理服务器:
如果要使用代理连接,请在下载之前使用以下命令。
bitsadmin /setproxysettings mydownloadjob OVERRIDE "proxy-server.com:8080"
如果您想了解更多关于BITSadmin.exe的信息,请点击LINK。
自定义函数
Call :DOWNLOAD_FILE "URL"
Call :DOWNLOAD_PROXY_ON "SERVER:PORT"
Call :DOWNLOAD_PROXY_OFF
我为简化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 FOREGROUND %1 %2
GOTO :EOF
:DOWNLOAD_PROXY_ON
rem FUNCTION FOR USING A PROXY SERVER:
bitsadmin /setproxysettings mydownloadjob OVERRIDE %1
GOTO :EOF
:DOWNLOAD_PROXY_OFF
rem FUNCTION FOR STOP USING A PROXY SERVER:
bitsadmin /setproxysettings mydownloadjob NO_PROXY
GOTO :EOF
DOWNLOAD-EXAMPLE.CMD
@ECHO OFF
SETLOCAL
rem FOR DOWNLOADING FILES, 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 URL (5MB TEST FILE):
SET "FILE_URL=http://ipv4.download.thinkbroadband.com/5MB.zip"
rem SAVE IN CUSTOM LOCATION:
rem SET "SAVING_TO=C:\Folder\5MB.zip"
rem SAVE IN THE CURRENT DIRECTORY
SET "SAVING_TO=5MB.zip"
SET "SAVING_TO=%~dp0%SAVING_TO%"
:MAIN
ECHO.
ECHO DOWNLOAD SCRIPT EXAMPLE
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 THE MAIN DOWNLOAD COMMAND:
CALL :DOWNLOAD_FILE "%FILE_URL%" "%SAVING_TO%"
rem UNCOMMENT NEXT LINE FOR DISABLING THE PROXY (IF YOU USED IT):
rem CALL :DOWNLOAD_PROXY_OFF
:RESULT
ECHO.
IF EXIST "%SAVING_TO%" ECHO YOUR FILE HAS BEEN SUCCESSFULLY DOWNLOADED.
IF NOT EXIST "%SAVING_TO%" ECHO ERROR, YOUR FILE COULDN'T BE DOWNLOADED.
ECHO.
:EXIT_SCRIPT
PAUSE
EXIT /B
rem FUNCTIONS SECTION
:DOWNLOAD_FILE
rem BITSADMIN COMMAND FOR DOWNLOADING FILES:
bitsadmin /transfer mydownloadjob /download /priority FOREGROUND %1 %2
GOTO :EOF
:DOWNLOAD_PROXY_ON
rem FUNCTION FOR USING A PROXY SERVER:
bitsadmin /setproxysettings mydownloadjob OVERRIDE %1
GOTO :EOF
:DOWNLOAD_PROXY_OFF
rem FUNCTION FOR STOP USING A PROXY SERVER:
bitsadmin /setproxysettings mydownloadjob NO_PROXY
GOTO :EOF
' 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
然后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
或者在 Windows 上双击它以进行测试
@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
More explanation here
在Windows 10的17063版本中,加入了CURL实用程序。要下载文件,您可以使用以下命令:
curl "https://download.sysinternals.com/files/PSTools.zip" --output pstools.zip
使用宏可能会使bitsadmin更容易使用:
set "download=bitsadmin /transfer myDownloadJob /download /priority normal"
%download% "https://download.sysinternals.com/files/PSTools.zip" %cd%\pstools.zip
为了保持向后兼容性,您可以使用 winhttpjs.bat,通过它,您可以执行POST、DELETE和其他HTTP方法:
call winhhtpjs.bat "https://example.com/files/some.zip" -saveTo "c:\somezip.zip"
Download Wget from here http://downloads.sourceforge.net/gnuwin32/wget-1.11.4-1-setup.exe
Then install it.
Then make some .bat file and put this into it
@echo off
for /F "tokens=2,3,4 delims=/ " %%i in ('date/t') do set y=%%k
for /F "tokens=2,3,4 delims=/ " %%i in ('date/t') do set d=%%k%%i%%j
for /F "tokens=5-8 delims=:. " %%i in ('echo.^| time ^| find "current" ') do set t=%%i%%j
set t=%t%_
if "%t:~3,1%"=="_" set t=0%t%
set t=%t:~0,4%
set "theFilename=%d%%t%"
echo %theFilename%
cd "C:\Program Files\GnuWin32\bin"
wget.exe --output-document C:\backup\file_%theFilename%.zip http://someurl/file.zip
Adjust the URL and the file path in the script
Start-BitsTransfer -Source http://www.foo.com/package.zip -Destination C:\somedir\package.zip