This is an old revision of the document!

How do I automate file transfers, synchronization or other operations?

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

Commands

To automate operation, you need to find out commands necessary to implement it. For simple operations you need at least to:

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

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.

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

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.

Checking script results

To check results of the script you can:

  • Check exit code of WinSCP. See example below and another 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 (> filename at the end of commandline executing WinSCP). Note that you can redirect output of WinSCP.com only (see documentation).

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.