How to download files from FTP site in one command line without user interaction (Windows)

151,682

Solution 1

I found the way:

echo open 192.168.0.1 >> ftp &echo user admin w00t >> ftp &echo binary >> ftp &echo get file.zip >> ftp &echo bye >> ftp &ftp -n -v -s:ftp &del ftp

Solution 2

Try this: Batch files - Unattended FTP downloads

WGET ftp://ftp.mydomain.com/path/file.ext  

for anonymous downloads

or:

WGET ftp://user:[email protected]/path/file.ext  

when authentication is required.


As @XavierStuvw pointed out via edits and comments, swapping WGET to a lowercase wget would work in linux.

wget ftp://user:[email protected]/path/file.ext

Solution 3

Note that you can ask for the syntax of a command in DOS by using the /? switch. For example:

C:\>ftp /?

Transfers files to and from a computer running an FTP server service
(sometimes called a daemon). Ftp can be used interactively.

FTP [-v] [-d] [-i] [-n] [-g] [-s:filename] [-a] [-A] [-x:sendbuffer] [-r:recvbuf
fer] [-b:asyncbuffers] [-w:windowsize] [host]

  -v              Suppresses display of remote server responses.
  -n              Suppresses auto-login upon initial connection.
  -i              Turns off interactive prompting during multiple file
                  transfers.
  -d              Enables debugging.
  -g              Disables filename globbing (see GLOB command).
  -s:filename     Specifies a text file containing FTP commands; the
                  commands will automatically run after FTP starts.
  -a              Use any local interface when binding data connection.
  -A              login as anonymous.
  -x:send sockbuf Overrides the default SO_SNDBUF size of 8192.
  -r:recv sockbuf Overrides the default SO_RCVBUF size of 8192.
  -b:async count  Overrides the default async count of 3
  -w:windowsize   Overrides the default transfer buffer size of 65535.
  host            Specifies the host name or IP address of the remote
                  host to connect to.

Notes:
  - mget and mput commands take y/n/q for yes/no/quit.
  - Use Control-C to abort commands.

In your case, you'll want to use the -s switch to feed it a script, including the login responses.

For example:

  1. Create a script file (c:\scriptfile.txt) with the following contents:

    open
    servername_or_ip
    username
    password
    get
    /fullpath/thefile.txt
    c:\fullpath\thefile.txt
    quit
    
  2. execute ftp with the -s switch and specify the script filename

    C:\>ftp -s:c:\scriptfile.txt
    

Solution 4

Try curl, it is powerful and presents out of the box (win10).

curl --user ftpusername:ftpuserpass -o outputdirname\test.txt  ftp://host/test.txt

Solution 5

Here is another solution of how to download all files from a remote server folder to your local folder, using the command line and winscp scripting:

  1. Download and install WinSCP: https://winscp.net/eng/download.php

  2. Create a batch file e.g. "ftp-automate.bat" in a custom folder of your choice (e.g. "C:\customfolder").

  3. Edit the batch file "ftp-automate.bat" and add this content:

@echo off
echo Starting WinSCP
"C:\Program Files (x86)\WinSCP\WinSCP.com" /script="C:\customfolder\winscp-script.txt"
echo WinSCP finished
  1. Create the file "winscp-script.txt" in "C:\customfolder\winscp-script.txt" and add this content:
# Connect to SFTP server
open sftp://USERNAME:PASSWORD@HOSTORIP
# Download remote to local folder
get /var/lib/myfolderofinterest/* C:\mylocalfolder\
# optional: Remove remote files (remove #)
# rm /var/lib/myfolderofinterest/*
# Exit WINSCP
exit

Of course, you have to replace USERNAME with your FTP username, PASSWORD with your FTP password and HOSTORIP with your domain (ftp.mydomain.com) or IP address (12.34.56.78).


Security Note: Make sure the above script file on your PC is safe because it contains the credentials (password) to your server!


Tip: You might want to use Windows Task Scheduler (Action > Create Basic Task) to run the batch file once a day.

Share:
151,682

Related videos on Youtube

soundhax
Author by

soundhax

Updated on September 18, 2022

Comments

  • soundhax
    soundhax almost 2 years

    I know there is an FTP command which can be run from command line on Windows, and it downloads a file from an FTP site. User + password are specified in "that" one-line cmd. These options + password passtrough should be on that command line.

    echo open 192.168.1.64 21> ftp.txt
    echo anonymous>> ftp.txt
    echo [email protected]>> ftp.txt
    echo bin >> ftp.txt
    echo get test.txt >> ftp.txt
    echo bye >> ftp.txt
    
    ftp -s:ftp.txt
    
    • ganesh
      ganesh over 11 years
      Do you need to download via FTP or do you just need to download those file with any program? (Rsync can read from a file with names to sync and from the command line. Scp can also do that from the command line. Both are not as ancient as plain-text,no_true_security FTP).
  • soundhax
    soundhax over 11 years
    i dont see any command wich has user and password switch option in ONE line there.
  • soundhax
    soundhax over 11 years
    -s switch was in sentence as i remember
  • Canadian Luke
    Canadian Luke over 11 years
    Welcome to Super User! Whilst this may theoretically answer the question, it would be preferable to include the essential parts of the answer here, and provide the link for reference.
  • Peter Mortensen
    Peter Mortensen about 8 years
    On Windows XP (yes, yes, I know), this results in "Unknown host /?."
  • Peter Mortensen
    Peter Mortensen about 8 years
    This did not work when I tried it (I ended up using WinSCP's command line client instead). Which version of Windows was it tested on?
  • stallingOne
    stallingOne over 7 years
    Could you explain how this line works? Can't find any documentation. I'm trying to make it work with psftp
  • XavierStuvw
    XavierStuvw over 7 years
    wget ftp://user:[email protected]/path/file.ext also works with Linux systems -- with a lower-case wget thus
  • CalvT
    CalvT over 7 years
    @XavierStuvw that is correct - but this question is about Windows - I will edit the answer though
  • XavierStuvw
    XavierStuvw over 7 years
    @CalvT No objection. The envisioned benefit of the comment is that Linux-users may land on this page after an internet search and oversee the system it applies to. It happened to me, in fact.
  • CalvT
    CalvT over 7 years
    @XavierStuvw fair enough - I thought that the title would point them elsewhere - I've edited the answer, but will make it more prominent :)
  • XavierStuvw
    XavierStuvw over 7 years
    @CalvT The title is indeed precise, but search engines often visualize the whole answer frame and it's easy to splash into that. Of course this should not discount the reader from being mindful, but in this case it was coincidental that Linux and Windows instructions are basically the same. Well done, thanks.
  • Havenard
    Havenard over 4 years
    @stallingOne Think of the & as a line breaker... it is actually multiple commands. Basically he builds a script, line by line, using echo, and then tell ftp to run it. He's naming the script file ftp too, which makes it confusing.
  • Chad Schouggins
    Chad Schouggins over 4 years
    Poor choice of file name. "ftp" is both the file name of the script he's building and the name of the exe. So the path resolution at ftp -n -v -s:ftp is a bit hinky. (Each use of "ftp" refer to different things)
  • Zaccharie Ramzi
    Zaccharie Ramzi over 3 years
    How can you write this if your password has the character "@"?
  • Zaccharie Ramzi
    Zaccharie Ramzi over 3 years
    I resorted to using curl instead of wget, like this answer suggests.
  • Community
    Community over 2 years
    Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.