开发者

Download a file with VBS

开发者 https://www.devze.com 2023-01-02 11:58 出处:网络
Ive got a VBS Script that,generates an url to download a file from a server on my network. I now need to download the file to \"C:\\rWal开发者_高级运维lpaper\\wallpaper.png\", the URL is stored in the

Ive got a VBS Script that,generates an url to download a file from a server on my network. I now need to download the file to "C:\rWal开发者_高级运维lpaper\wallpaper.png", the URL is stored in the variable "url".

Id like it to work something like wget on linux, just download and save the file to a specified location.


You can download using XMLHTTP and leverage an ADO stream to write the binary data;

dim xHttp: Set xHttp = createobject("Microsoft.XMLHTTP")
dim bStrm: Set bStrm = createobject("Adodb.Stream")
xHttp.Open "GET", "http://example.com/someimage.png", False
xHttp.Send

with bStrm
    .type = 1 '//binary
    .open
    .write xHttp.responseBody
    .savetofile "c:\temp\someimage.png", 2 '//overwrite
end with


The above answer threw the error Write to file failed. Code: 800A0BBC for me, however this worked:

HTTPDownload "http://www.emagcloud.com/europeansealing/FSA_ESA_Compression_Packing_Technical_Manual_v3/pubData/source/images/pages/page10.jpg", "C:\"

Where

Sub HTTPDownload( myURL, myPath )
    ' This Sub downloads the FILE specified in myURL to the path specified in myPath.
    '
    ' myURL must always end with a file name
    ' myPath may be a directory or a file name; in either case the directory must exist
    '
    ' Written by Rob van der Woude
    ' http://www.robvanderwoude.com
    '
    ' Based on a script found on the Thai Visa forum
    ' http://www.thaivisa.com/forum/index.php?showtopic=21832
    
        ' Standard housekeeping
        Dim i, objFile, objFSO, objHTTP, strFile, strMsg
        Const ForReading = 1, ForWriting = 2, ForAppending = 8
    
        ' Create a File System Object
        Set objFSO = CreateObject( "Scripting.FileSystemObject" )
    
        ' Check if the specified target file or folder exists,
        ' and build the fully qualified path of the target file
        If objFSO.FolderExists( myPath ) Then
            strFile = objFSO.BuildPath( myPath, Mid( myURL, InStrRev( myURL, "/" ) + 1 ) )
        ElseIf objFSO.FolderExists( Left( myPath, InStrRev( myPath, "\" ) - 1 ) ) Then
            strFile = myPath
        Else
            WScript.Echo "ERROR: Target folder not found."
            Exit Sub
        End If
    
        ' Create or open the target file
        Set objFile = objFSO.OpenTextFile( strFile, ForWriting, True )
    
        ' Create an HTTP object
        Set objHTTP = CreateObject( "WinHttp.WinHttpRequest.5.1" )
    
        ' Download the specified URL
        objHTTP.Open "GET", myURL, False
        objHTTP.Send
    
        ' Write the downloaded byte stream to the target file
        For i = 1 To LenB( objHTTP.ResponseBody )
            objFile.Write Chr( AscB( MidB( objHTTP.ResponseBody, i, 1 ) ) )
        Next
    
        ' Close the target file
        objFile.Close( )
End Sub


In addition to Alex K answer, I used the following if it helps someone :

Define object

Set objWinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")

Call Download link with a file ( image in our case )

URL = "https://www.grupya.com/public/assets/img/logo.png"
objWinHttp.open "GET", URL, False
objWinHttp.send ""

Save the Binary data to Disk

SaveBinaryData "c:\temp\my.png",objWinHttp.responseBody

SaveBinaryData Function

Function SaveBinaryData(FileName, Data)

' adTypeText for binary = 1
Const adTypeText = 1
Const adSaveCreateOverWrite = 2

' Create Stream object
Dim BinaryStream
Set BinaryStream = CreateObject("ADODB.Stream")

' Specify stream type - we want To save Data/string data.
BinaryStream.Type = adTypeText

' Open the stream And write binary data To the object
BinaryStream.Open
BinaryStream.Write Data

' Save binary data To disk
BinaryStream.SaveToFile FileName, adSaveCreateOverWrite

End Function


This post is old, but the error in the first code answer is that you need privileges to write at C:\,Try at desktop or %temp%, it works.


I found out that mapping a drive can be a good approach

   dim Z
   Z = "http:// .... " '(base url)
   Set FSO = CreateObject("Scripting.Filesystemobject")
    Set objNetwork = CreateObject("WScript.Network") 
    '## This is for network drives
    
    If FSO.driveExists ("Z:") then 
        objNetwork.RemoveNetworkDrive "Z:", True, True
    End If      

    '## for adding
    'Set objNetwork = CreateObject("WScript.Network")
    objNetwork.MapNetworkDrive "Z:" , Z

From there, you can define the rest of the url to your file

SourceFileName = "Z:\" & ...

and a destination File Name

DestinFileName = "..."

Then you can use

 FSO.CopyFile SourceFileName, DestinFileName, True


Try:

CreateObject("WScript.Shell").Run "curl -o "Path and filename"
0

精彩评论

暂无评论...
验证码 换一张
取 消