You are on page 1of 6

2023-02-28 Unknown author

Automate file transfers (or synchronization) to


FTP server or SFTP server :: WinSCP
Documentation » Using WinSCP » Guides » Scripting/Automation »

This guide contains a simplified description of automating operations on FTP/SFTP


server with WinSCP. You may want to see detailed documentation of the scripting
functionality instead.

WinSCP offers scripting interface that you can use to automate many operations
that it supports, including file transfers, synchronization and other operations.

There is also WinSCP .NET assembly built on top of the scripting interface. If you
plan to call WinSCP from your .NET code or PowerShell, or if your task requires
conditional processing, loops or other control structures, you should better use the
.NET assembly. This guide focuses on simple automation tasks using scripting
interface only.

Before Starting
Commands
Script file
Generating script
Using script
Notes
Modifying the script automatically
Checking script results
Example
Further reading

Before starting you should:

Have WinSCP installed;


Know how to connect to your FTP/SFTP account.
To automate operation, you need to find out commands necessary to implement it.
For simple operations you need at least to:

Open session using open command.


Perform operation. For uploads use put command. For downloads use get
command. For synchronization use synchronize command. For other
operations, see supported commands.
Exit scripting using exit command.

For example a typical script to upload a file is:

# Connect to SFTP server using a password


open sftp://user:password@example.com/ -hostkey="ssh-rsa 2048
xxxxxxxxxxx..."
# Upload file
put d:\examplefile.txt /home/user/
# Exit WinSCP
exit

Assemble the commands into a script file. You can name the script file as you like.
See simple example and some useful scripts.

Use the /script command line option to pass the script to the WinSCP executable.
Generally, you should also use /ini=nul switch to isolate the script execution from
GUI configuration and /log= switch to enable session logging. You can embed the
complete command line into a Windows batch file (.bat), like as follows:

@echo off
winscp.com /ini=nul /log=myscript.log /script=myscript.txt

You can have WinSCP generate a script template for you or even a complete batch
file.

To generate a script for a file transfer:

Connect in the GUI.


Select the files you want to transfer.
Use one of the file transfer commands: Upload, Download, Upload and Delete,
Download and Delete.
On the transfer confirmation dialog, setup transfer options (if you need any
non-default settings).
Use the Transfer Settings > Generate Code command.
The Generate transfer code dialog will appear with the generated script or code
template.

Now to make using script easier/automatic you can:

Make shortcut to it on desktop to ease execution. Either make shortcut to


batch file (.bat) or enter full command line to shortcut itself.1
If the wrapping batch file takes filename as command line parameter (see
below) you can:
Make shortcut to it on desktop and use it by dropping files on the icon.
Windows automatically run the batch file and passes path to dropped file
as command-line parameter.
In a similar way you can put the shortcut to the batch file into Explorer’s
‘Send To’ context menu
(C:\Users\username\AppData\Roaming\Microsoft\Windows\SendTo in
Windows Vista and newer).

Schedule automatic execution.

When connecting to the SSH host, you will need to accept its host key.

When connecting to FTPS or WebDAVS host with certificate signed by an untrusted


authority you will need to verify the certificate.

You may want to modify the script automatically. For example you may want to
operate it with different file each time.

For tasks involving more complex modifications, conditional processing, loops or


other control structures, you should better use the WinSCP .NET assembly.

For simple modifications, you can pass the variable parts of the script from
command line:

open mysession
put %1%
exit
Execute the above script using syntax:

winscp.com /ini=nul /log=script.log /script=script.tmp /parameter // c:\myfile.txt

You can also use environment variables in the script.

Alternatively, you can generate new script file each time. To automate that, make a
wrapper script file. For simple tasks you can use built-in Windows scripting
functionality from batch file (.bat). For complex tasks, you will need to use some
scripting language, such JScript or VBScript from Windows script host or PHP or
Perl.

Following example shows batch file that takes filename on command line and
generates WinSCP script file to upload that file to remote server:

rem Generate a temporary script to upload %1


(
echo open mysession
echo put %1
echo exit
) > script.tmp

rem Execute the script


winscp.com /ini=nul /log=script.log /script=script.tmp

rem Delete the temporary script


del script.tmp

Now you can run the batch file like (supposing you have saved it to file upload.bat):

upload.bat c:\myfile.txt

See more hints on using parametrized batch file.

See Conditional processing in automation for a more complex example; and


Advanced FTP/SFTP scripting for examples of script generation using more
powerful languages.

To check results of the script you can:

Check exit code of WinSCP (exit code is the only relevant and reliable way to
check if script completed successfully). See example below and FAQ.
Save and inspect log file. XML log format is recommended. Use command-line
parameter /xmllog.
Save and inspect output of the script. Use output redirection.

Once you find out what was the result of the script, you can perform any action you
like: print a message, send an email, etc.

You should also make the batch file indicate a result in its exit code, particularly if it
is called from some parent system (for example SSIS).

See an example batch file:

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


if %ERRORLEVEL% equ 0 (
echo Success
exit /b 0
) else (
echo Error!
exit /b 1
)

A similar error handling is used in the batch file template that WinSCP can generate
for you.

If you require checking results of each command individually, you should better use
the WinSCP .NET assembly. Alternatively, see the guide Advanced FTP/SFTP
scripting for examples of checking script results (including XML log parsing) using
more powerful languages and the guide to Interpreting XML log for advanced
scripting using C# language.

See example in scripting documentation.

Troubleshooting;
Scripting documentation;
Guide to Advanced FTP/SFTP scripting;
WinSCP .NET assembly and COM library;
Command-line parameters;
WinSCP executables;
FAQ about scripting;
Example scripts;
Schedule file transfers (or synchronization) to FTP/SFTP server.

Note that it is not possible to use winscp.com (.com files in general) directly
from a shortcut. Call winscp.com from a batch file or use winscp.exe with
/console command-line parameter.Back

Viewed using Just Read

You might also like