Documentation » Using WinSCP » Guides » Scripting/Automation »

Converting Windows FTP script to WinSCP SFTP script

This guide explains how to convert existing FTP file transfer script using Windows built-in command-line FTP client (ftp.exe) to SFTP script using WinSCP.

You can also use it to convert FTP script using ftp.exe to WinSCP, in case you want to use some advanced feature that WinSCP offers, such as FTP over TLS/SSL, synchronization, passive mode,1 parametrized script, timestamped file names, custom directory listing format, UTF-8 support, preserving file timestamp, recursive downloads and uploads, and others.

Advertisement

Advertisement

Converting Command-Line

In your command that runs ftp.exe substitute ftp.exe with winscp.com.

Following table shows how to convert some ftp.exe parameters:

Parameter Conversion
-n There is no equivalent. In WinSCP all of hostname, username and password are specified using single command open. See also converting credentials below.
-i WinSCP does not prompt for individual transfers during multi-file transfers, so there’s no conversion needed.
-d Enable session logging using /log=<logfile> parameter.
-A SFTP servers typically do not allow anonymous login. With FTP protocol, use explicit anonymous username and some password if needed (typically in form of email address) with open command.
-s:filename Use /script=filename parameter. Convert the script as documented below.
host While WinSCP also allows specifying hostname on command-line, recommended is to use open host command in the WinSCP script.

Other parameters can be typically ignored.

For example following command:

ftp.exe -s:script.txt

converts to:

winscp.com /script=script.txt

Isolating Script from Graphical Mode

WinSCP in scripting/console mode shares configuration with graphical mode by default. Particularly when implementing script from scratch, it is recommended to isolate the script from graphical mode configuration to avoid script breaking, when the configuration changes.

For that, add /ini=nul command-line parameter:

winscp.com /script=script.txt /ini=nul

Converting Credentials

The ftp.exe client, when hostname (host parameter) is specified on command line and unless -n parameter is used, needs username and password specified as the first lines of the script. With WinSCP it is recommended to specify hostname together with username and password as arguments to open command.

Advertisement

For example, command ftp.exe ftp.example.com -s:script.txt, with script.txt starting:

username
password
...

converts to command winscp.com /script=script.txt, with script.txt starting:

open sftp://username:password@sftp.example.com/

Replace the sftp:// with the ftp://, if you keep using the FTP protocol.

Error Handling

WinSCP by default aborts the script when some of the commands fail. On the contrary ftp.exe continues processing a script after an error. If your original ftp.exe script relies on this behavior, you can emulate it in WinSCP by switching the batch mode to on at the beginning of your script:

option batch on

Converting Commands

append

Use put -append <localfile> [remotefile].

The -append switch is supported with the SFTP protocol only.

ascii

Use -transfer=ascii switch for all following file transfer commands (put or get).

Example:

ascii
put file.txt

converts to:

put -transfer=ascii file.txt

Advertisement

Note that WinSCP also supports ascii command, but its use is deprecated.

bye

Use exit.

Note that WinSCP also supports bye alias.

binary

Use -transfer=binary switch for all following file transfer commands (put or get).

Example:

binary
put file.txt

converts to:

put -transfer=binary file.txt

Note that WinSCP also supports binary command, but its use is deprecated.

cd

Use cd command.

close

Use close command.

delete

Use rm command.

Note that WinSCP also supports delete alias.

dir

Use ls command.

Advertisement

WinSCP does not support storing listing to a local file (second parameter of dir command).

Note that WinSCP also supports dir alias.

disconnect

Alias to close command.

get

Use get command.

You need to map previous binary or ascii commands to -transfer switch.

Example:

ascii
get index.html

converts to:

get -transfer=ascii index.html

glob

In WinSCP, to escape special characters in filename, use set pattern.

For example to download file with literal * character, use get filewithstar[*].

hash

WinSCP always prints percentual progress of file transfer when run in console. It does not output progress when redirected to a file.

lcd

Use lcd command.

literal

There are no textual commands in SFTP protocol. You can execute remote shell commands using call command.

Advertisement

With FTP protocol, you can use call command to execute FTP protocol commands.

ls

You can use ls command to list directory contents with full details.

mdelete

Use rm command.

mget

Use get command.

You need to map previous binary or ascii commands to -transfer switch.

WinSCP command get can accept multiple files as its arguments, but the last argument needs to be target path. Use .\ to download to current local working directory (equivalent to mget).

Note that get command never prompts before individual file transfer.

Example:

ascii
mget *.html *.txt

converts to:

get -transfer=ascii *.html *.txt .\

Note that WinSCP also supports mget as an alias to get command.

mkdir

Use mkdir command.

mput

Use put command.

You need to map previous binary or ascii commands to -transfer switch.

Advertisement

WinSCP command put can accept multiple files as its arguments, but the last argument needs to be target path. Use ./ to upload to current remote working directory (equivalent to mput).

Note that put command never prompts before individual file transfer.

Example:

ascii
mput *.html *.txt

converts to:

put -transfer=ascii *.html *.txt ./

Note that WinSCP also supports mput as an alias to put command.

open

Use open command.

Credentials specified on separate lines of ftp.exe script (following open command) need to convert to part of session URL parameter of WinSCP open command. See converting credentials above. The same applies to username specified using user command.

Example:

open ftp.example.com
username
password

or equivalent (when ftp.exe -n command-line parameter is used):

open ftp.example.com
user username
password

converts to:

open sftp://username:password@sftp.example.com/

Advertisement

Replace the sftp:// with the ftp://, if you keep using the FTP protocol.

prompt

WinSCP does not prompt for individual transfers during multi-file transfers, so there’s no conversion needed.

put

Use put command.

You need to map previous binary or ascii commands to -transfer switch.

Example:

ascii
put index.html

converts to:

put -transfer=ascii index.html

pwd

Use pwd command.

quit

Alias to bye command.

quote

Alias to literal command.

recv

Alias to get command.

Note that WinSCP also supports recv alias.

rename

Use mv command.

Advertisement

Note that WinSCP also supports rename alias.

rmdir

Use rmdir command.

send

Alias to put command.

Note that WinSCP also supports send alias.

type

Command type ascii is an alias to ascii command.

Command type binary is an alias to binary command.

user

In WinSCP, username is specified as part of session URL parameter of WinSCP open command.

Example:

open ftp.example.com
user username
password

converts to:

open sftp://username:password@sftp.example.com/

Replace the sftp:// with the ftp://, if you keep using the FTP protocol.

verbose

There is no direct equivalent.

You can instead enable session logging using /log=<logfile> command-line parameter:

winscp.com /script=script.txt /ini=nul /log=session.log

Advertisement

! (exit to local shell)

WinSCP does not support exiting to local shell. You need to exit WinSCP script; execute your local commands from a wrapping batch file; and start a new WinSCP script afterwards.

For more advanced tasks, consider using WinSCP .NET assembly from PowerShell script.

Example

Command ftp.exe -s:script.txt with script.txt:

prompt
open ftp.example.com
username
password
cd /home/user
binary
mget *.zip
close
quit

converts to command winscp.com /script=script.txt /ini=nul with script.txt:

open sftp://username:password@sftp.example.com/
cd /home/user
get -transfer=binary *.zip
close
exit

Replace the sftp:// with the ftp://, if you keep using the FTP protocol.

  1. WinSCP defaults to passive mode.Back

Last modified: by martin