dar0x
dar0x

Reputation: 361

windows batch: download file into current folder

I would to dowload a file from a .bat script in Windows 7, and put it into current folder (where the script is).

I tried in this way, with no (good) results:

    SET FILENAME = "name.ext"
    bitsadmin.exe /transfer "JobName" http://www.someurl.com/file.ext %cd%%FILENAME%

I got this:

    Unable to add file - 0x80070005

Why? I suppose that string concat fails

(I know that bitsadmin is deprecated in Win7)

Thank you in advance!

Upvotes: 3

Views: 25998

Answers (6)

amegyoushi
amegyoushi

Reputation: 613

Just use Powershell it wont be a problem.

@echo off
setlocal enabledelayedexpansion
set _wdraft=%~dp0file.txt
set _dlwebf=http://df291a01bce923.sampledl.com/d/file.txt
Powershell -Command "(New-Object Net.WebClient).DownloadFile('%_dlwebf%','%_wdraft%')"
endlocal

This may take up to 20 seconds, more or less depending on the file size.

Upvotes: 0

Ultra Gamer Ph
Ultra Gamer Ph

Reputation: 1

@echo off
SET "FILENAME=%~dp0\name.ext"
bitsadmin.exe /transfer "JobName" http://www.someurl.com/file.ext "%FILENAME%"
pause

This one works. Just change the line

SET "FILENAME=%~dp0\name.ext" 

to

SET "FILENAME=%~dp0\Your File Name"

Upvotes: -2

Valen
Valen

Reputation: 1763

powershell

start-bitstransfer -source protocol://url.host/url.path -destination C:\destination\file.ext

from cmd env

powershell -command "start-bitstransfer -source protocol://url.host/url.path -destination C:\destination\file.ext"

reference

Upvotes: 4

npocmaka
npocmaka

Reputation: 57262

EDIT - How can I download a file with batch file without using any external tools?

I think Bitsadmin does not work with relative paths and you need to add full name to the local file.

You can check also my bitsadmin script thats spends a lot of dirty work - it accepts two arguments url and the path to the local file (and a timeout number - default is 5).As you can see the it pre-pend %CD% to the local file name:

   @echo off
    setlocal
   :download
   
    if "%2" equ "" (
      call :help
      exit /b 5
   )
   
   if "%1" equ "" (
      call :help
      exit /b 6
   )
    set url=%~1
    set file=%~2
    rem ----
    if "%~3" NEQ "" (
        set /A timeout=%~3
    ) else (
        set timeout=5
    )

    bitsadmin /cancel download >nul
    bitsadmin /create /download download >nul 
    call bitsadmin /addfile download "%url%" "%CD%\%file%" >nul
    bitsadmin /resume download >nul 
    bitsadmin /setproxysettings download AUTODETECT >nul

    set /a attempts=0
    :repeat
    set /a attempts +=1
    if "%attempts%" EQU "10" (
        echo TIMED OUT
        endlocal
        exit /b 1
    )
    bitsadmin /info download /verbose | find  "STATE: ERROR"  >nul 2>&1 && endlocal &&  bitsadmin /cancel download && echo SOME KIND OF ERROR && exit /b 2
    bitsadmin /info download /verbose | find  "STATE: SUSPENDED" >nul 2>&1 && endlocal &&  bitsadmin /cancel download &&echo FILE WAS NOT ADDED && exit /b 3
    bitsadmin /info download /verbose | find  "STATE: TRANSIENT_ERROR" >nul 2>&1 && endlocal &&  bitsadmin /cancel download &&echo TRANSIENT ERROR && exit /b 4
    bitsadmin /info download /verbose | find  "STATE: TRANSFERRED" >nul 2>&1 && goto :finishing 
    
   w32tm /stripchart /computer:localhost /period:1 /dataonly /samples:%timeout%  >nul 2>&1
    goto :repeat
    :finishing 
    bitsadmin /complete download >nul
    echo download finished
    endlocal
   goto :eof
   
   :help
   echo %~n0 url file [timeout]
   echo.
   echo  url - the source for download
   echo  file - file name in local directory where the file will be stored
   echo  timeout - number in seconds between each check if download is complete (attempts are 10)
   echo.
   goto :eof

You can check also this jscript.net self compiled hybrid (save it as .bat):

@if (@X)==(@Y) @end /****** jscript comment ******

@echo off
::::::::::::::::::::::::::::::::::::
:::       compile the script    ::::
::::::::::::::::::::::::::::::::::::
setlocal
if exist simpledownloader.exe goto :skip_compilation

set "frm=%SystemRoot%\Microsoft.NET\Framework\"
:: searching the latest installed .net framework
for /f "tokens=* delims=" %%v in ('dir /b /s /a:d /o:-n "%SystemRoot%\Microsoft.NET\Framework\v*"') do (
    if exist "%%v\jsc.exe" (
        rem :: the javascript.net compiler
        set "jsc=%%~dpsnfxv\jsc.exe"
        goto :break_loop
    )
)
echo jsc.exe not found && exit /b 0
:break_loop


call %jsc% /nologo /out:"simpledownloader.exe" "%~dpsfnx0"
::::::::::::::::::::::::::::::::::::
:::       end of compilation    ::::
::::::::::::::::::::::::::::::::::::
:skip_compilation

:: download the file


::
::::::::::
 simpledownloader.exe "%~1" "%~2"
::::::::
::

exit /b 0


****** end of jscript comment ******/

import System;
var arguments:String[] = Environment.GetCommandLineArgs();
var webClient:System.Net.WebClient = new System.Net.WebClient();
print("Downloading " + arguments[1] + " to " + arguments[2]);
try {
    webClient.DownloadFile(arguments[1], arguments[2]);
} catch (e) {

        Console.BackgroundColor = ConsoleColor.Green;
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine("\n\nProblem with downloading " + arguments[1] + " to " + arguments[2] + "Check if the internet address is valid");
        Console.ResetColor();
        Environment.Exit(5);
}

Upvotes: 2

foxidrive
foxidrive

Reputation: 41234

Your problem was the spaces on either side of the equals sign. They get included in both the variable name and in the contents of the variable - plus the lack of the backslash that you found.

Test this:

@echo off
SET "FILENAME=%~dp0\name.ext"
bitsadmin.exe /transfer "JobName" http://www.someurl.com/file.ext "%FILENAME%"

EDIT: In case you are executing this as admin, try the edited code above.
because when running with elevated permissions then the working directory changes.

Please report all error messages when you say that something doesn't work, so the problem can be worked out.

Upvotes: 5

dar0x
dar0x

Reputation: 361

I solved on my own, without using FILENAME variable:

    bitsadmin.exe /transfer "JobName" http://www.someurl.com/file.ext "%cd%\name.ext"

Upvotes: 2

Related Questions