This is an old revision of the document!
Automate file transfers (or synchronization) to FTP/SFTP server
This guide contains 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.
Before starting you should:
Advertisement
- Commands
- Script file
- Using script
- Notes
- Modifying the script automatically
- Checking script results
- Further reading
Commands
To automate operation, you need to find out commands necessary to implement it. For simple operations you need at least to:
- Set script to be performed non-interactively. For most automation scripts, you should use commands
option batch on
andoption confirm off
. - Open session. You can use
open
command (alternatively specify session on command line). - Perform operation. For uploads use
put
command. For downloads useget
command. For synchronization usesynchronize
command. For other operations, see supported commands. - Exit scripting using
exit
command.
Script file
Assemble the commands into script file. You can name the script file as you like. See simple example and some useful scripts.
Use /script
command line option to pass the script to WinSCP. You can embed whole command line into Windows batch file (.bat
), such as:
@echo off winscp /console /script=myscript.txt
Advertisement
Using script
Now to make using script easier/automatic you can:
- Make shortcut to it on desktop. Either make shortcut to batch file (
.bat
) or enter full command line to shortcut itself. - Schedule automatic execution.
Notes
When connecting to SSH host, you will need to accept its host key.
When connecting to FTPS host with certificate signed by untrusted authority you will need to verify the certificate.
Modifying the script automatically
You may want to modify the script automatically. For example you may want to operate it with different file each time.
For simple modifications, you can use environment variables from the script:
option batch on option confirm off open session put %FILE_TO_UPLOAD% exit
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 as 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 temporary script to upload %1 echo option batch on > script.tmp echo option confirm off >> script.tmp echo open session >> script.tmp echo put %1 >> script.tmp echo exit >> script.tmp rem Execute script winscp /script=script.tmp rem Delete temporary script del script.tmp
Advertisement
Now you can run the batch file like (supposing you have saved it to file upload.bat
):
upload.bat c:\myfile.txt
You can also put the script on your desktop and than easily use it by dropping files on its icon. Windows automatically run the script and passes path to dropped file as command-line parameter. In the same way you can put the script into Explorer’s ‘Send To’ context menu (c:\documents and settings\username\sendto
).
See guide to advanced scripting for examples of script generation using more powerful languages.
Checking script results
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
/log
. - 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. E.g. after evaluating exit code of WinSCP, you can send a “success” or “error” email. For that use any command-line email client you like, e.g. sendmail:
winscp.com /script=example.txt if errorlevel 1 goto error echo Success sendmail.exe -t < success_mail.txt goto end :error echo Error! sendmail.exe -t < error_mail.txt :end
Where for example content of success_mail.txt
may be:
From: script@example.com To: me@example.com Subject: Success The files were uploaded successfully.
Advertisement
See guide to advanced scripting for examples of checking script results (including XML log parsing) using more powerful languages.
Further reading
- Troubleshooting;
- Scripting documentation;
- Guide to advanced scripting;
- Command-line parameters;
- WinSCP executables;
- FAQ about scripting;
- Example scripts.