Differences

This shows you the differences between the selected revisions of the page.

2014-01-14 2014-01-15
draft (martin) completed (martin)
Line 1: Line 1:
====== Converting Windows FTP script to WinSCP SFTP script ====== ====== Converting Windows FTP script to WinSCP SFTP script ======
-This guide explains how to convert existing file transfer script using Windows built-in command·line FTP client (''ftp.exe'') to SFTP script using WinSCP.+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.exe'' script to FTP script using WinSCP, in case you want to use some advanced feature that WinSCP offers (such as [[scriptcommand_synchronize|synchronization]]).+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 [[scriptcommand_synchronize|synchronization]]).
-===== Converting Command-Line =====+===== [[commandline]] Converting Command-Line =====
In your command that runs ''ftp.exe'' substitute ''ftp.exe'' with ''[[executables|winscp.com]]''. In your command that runs ''ftp.exe'' substitute ''ftp.exe'' with ''[[executables|winscp.com]]''.
Line 12: Line 12:
| ''-n'' | There is no equivalent. In WinSCP all of hostname, username and password are specified using single command ''[[scriptcommand_open|open]]''. See also [[guide_ftp_script_to_sftp#credentials|converting credentials]] below. | | ''-n'' | There is no equivalent. In WinSCP all of hostname, username and password are specified using single command ''[[scriptcommand_open|open]]''. See also [[guide_ftp_script_to_sftp#credentials|converting credentials]] below. |
| ''-i'' | WinSCP does not prompt for individual transfers during multi-file transfers, so there's no conversion needed. | | ''-i'' | WinSCP does not prompt for individual transfers during multi-file transfers, so there's no conversion needed. |
-| ''-d'' | Enable [[logging|session logging]] using ''/log=logpath'' parameter. | +| ''-d'' | Enable [[logging|session logging]] using ''/log=<logfile>'' parameter. | 
-| ''-A'' | SFTP servers typically do not allow anonymous login. | +| ''-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 ''[[scriptcommand_open|open]]'' command. | 
-| ''-s:filename'' | Use ''/script=filename'' parameter, see below. |+| ''-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. | | ''host'' | While WinSCP also allows specifying hostname on command-line, recommended is to use ''open host'' command in the WinSCP script. |
Line 40: Line 40:
Read more details about [[scripting#using_scripting|using scripting]]. Read more details about [[scripting#using_scripting|using scripting]].
 +
 +===== [[ini]] Isolating Script from Graphical Mode =====
 +
 +WinSCP in scripting/console mode shares [[config|configuration]] with [[interfaces|graphical mode]] by default. Particularly when implementing script from scratch, it is recommended to [[scripting#configuration|isolate the script from graphical mode configuration]] to avoid script breaking, when the configuration changes.
 +
 +For that, add ''/ini=nul'' command-line parameter:
 +
 +<code>
 +winscp.com /script=script.txt /ini=nul
 +</code>
===== [[credentials]] Converting Credentials ===== ===== [[credentials]] Converting Credentials =====
-The ''ftp.exe'' client, when hostname is specified on command line and unless ''-n'' parameter is used, needs username and password specified as first commands of the script. With WinSCP it is not recommended to specify hostname on command-line and username and password come as arguments to ''[[scriptcommand_open|open]]'' command.+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 not recommended to specify hostname on command-line and username and password come as arguments to ''[[scriptcommand_open|open]]'' command.
For example, command ''ftp.exe %%ftp.example.com%% -s:script.txt'', with ''script.txt'' starting: For example, command ''ftp.exe %%ftp.example.com%% -s:script.txt'', with ''script.txt'' starting:
Line 86: Line 96:
==== bye ==== ==== bye ====
Use ''[[scriptcommand_exit|exit]]''. Use ''[[scriptcommand_exit|exit]]''.
 +
 +Note that WinSCP also supports ''bye'' alias.
==== binary ==== ==== binary ====
Line 106: Line 118:
==== cd ==== ==== cd ====
-Use same syntax in WinSCP script.+Use ''[[scriptcommand_cd|cd]]'' command.
==== close ==== ==== close ====
-Use same syntax in WinSCP script.+Use ''[[scriptcommand_close|close]]'' command.
==== delete ==== ==== delete ====
-Use ''[[scriptcommand_rm|rm]]'' command (note that ''delete'' alias is also supported).+Use ''[[scriptcommand_rm|rm]]'' command
 + 
 +Note that WinSCP also supports ''delete'' alias.
==== dir ==== ==== dir ====
Line 118: Line 132:
WinSCP does not support storing listing to a local file (second parameter of ''dir'' command). WinSCP does not support storing listing to a local file (second parameter of ''dir'' command).
 +
 +Note that WinSCP also supports ''dir'' alias.
==== disconnect ==== ==== disconnect ====
-Use ''[[scriptcommand_close|close]]'' command.+Alias to ''[[scriptcommand_close|close]]'' command.
==== get ==== ==== get ====
-Use same syntax in WinSCP script.+Use ''[[scriptcommand_get|get]]'' command. 
 + 
 +You need to map previous ''[[guide_ftp_script_to_sftp#binary|binary]]'' or ''[[guide_ftp_script_to_sftp#ascii|ascii]]'' commands to ''-transfer'' switch. 
 + 
 +Example: 
 + 
 +<code> 
 +ascii 
 +get index.html 
 +</code> 
 + 
 +converts to: 
 + 
 +<code winscp> 
 +get -transfer=ascii index.html 
 +</code>
==== glob ==== ==== glob ====
-In WinSCP, to escape special characters in file mask, use [[file_mask#basic_syntax|set pattern]].+In WinSCP, to escape special characters in filename, use [[file_mask#basic_syntax|set pattern]].
-For example to download file with literal ''*'' character use ''get filewithstar[*]''.+For example to download file with literal ''*'' character, use ''get filewithstar[*]''.
==== hash ==== ==== hash ====
Line 134: Line 165:
==== lcd ==== ==== lcd ====
-Use same syntax in WinSCP script.+Use ''[[scriptcommand_lcd|lcd]]'' command.
==== literal ==== ==== literal ====
-Where are no literal commands in SFTP protocol. You can execute [[remote_command|remote shell commands]] using ''[[scriptcommand_call|call]]'' command.·With FTP protocol, you can use ''call'' command to execute FTP protocol commands.+Where are no textual commands in SFTP protocol. You can execute [[remote_command|remote shell commands]] using ''[[scriptcommand_call|call]]'' command. 
 + 
 +With FTP protocol, you can use ''call'' command to execute FTP protocol commands.
==== ls ==== ==== ls ====
Line 157: Line 190:
<code> <code>
-binary+ascii
mget index.html about.html mget index.html about.html
</code> </code>
Line 164: Line 197:
<code winscp> <code winscp>
-get -transfer=binary index.html about.html .\+get -transfer=ascii index.html about.html .\
</code> </code>
 +
 +Note that WinSCP also supports ''mget'' as an alias to ''get'' command.
==== mkdir ==== ==== mkdir ====
-Use same syntax in WinSCP script.+Use ''[[scriptcommand_mkdir|mkdir]]'' command.
==== mput ==== ==== mput ====
Line 175: Line 210:
You need to map previous ''[[guide_ftp_script_to_sftp#binary|binary]]'' or ''[[guide_ftp_script_to_sftp#ascii|ascii]]'' commands to ''-transfer'' switch. You need to map previous ''[[guide_ftp_script_to_sftp#binary|binary]]'' or ''[[guide_ftp_script_to_sftp#ascii|ascii]]'' commands to ''-transfer'' switch.
-WinSCP command ''put'' can accept multiple files as its arguments, but the last argument needs to be target path. Use ''./'' to download to current remote working directory (equivalent to ''mput'').+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 ''get'' command never prompts before individual file transfer.+Note that ''put'' command never prompts before individual file transfer.
Example: Example:
<code> <code>
-binary+ascii
mput index.html about.html mput index.html about.html
</code> </code>
Line 189: Line 224:
<code winscp> <code winscp>
-put -transfer=binary index.html about.html ./+put -transfer=ascii index.html about.html ./
</code> </code>
 +Note that WinSCP also supports ''mput'' as an alias to ''put'' command.
 +==== open ====
 +Use ''[[scriptcommand_open|open]]'' command.
 +
 +Credentials specified on separate lines of ''ftp.exe'' script (following ''open'' command) need to convert to part of [[session_url|session URL]] parameter of WinSCP ''open'' command. See [[guide_ftp_script_to_sftp#credentials|converting credentials]] above. The same applies to username specified using ''[[guide_ftp_script_to_sftp#user|user]]'' command.
 +
 +Example:
 +
 +<code>
 +open ftp.example.com
 +username
 +password
 +</code>
 +
 +or equivalent (when ''ftp.exe -n'' command-line parameter is used):
 +
 +<code>
 +open ftp.example.com
 +user username
 +password
 +</code>
 +
 +convert to:
 +
 +<code winscp>
 +open sftp://username:password@sftp.example.com
 +</code>
 +
 +==== prompt ====
 +
 +WinSCP does not prompt for individual transfers during multi-file transfers, so there's no conversion needed.
 +
 +==== put ====
 +Use ''[[scriptcommand_put|put]]'' command.
 +
 +You need to map previous ''[[guide_ftp_script_to_sftp#binary|binary]]'' or ''[[guide_ftp_script_to_sftp#ascii|ascii]]'' commands to ''-transfer'' switch.
 +
 +Example:
 +
 +<code>
 +ascii
 +put index.html
 +</code>
 +
 +converts to:
 +
 +<code winscp>
 +put -transfer=ascii index.html
 +</code>
 +
 +==== pwd ====
 +Use ''[[scriptcommand_pwd|pwd]]'' command.
 +
 +==== quit ====
 +Alias to ''[[guide_ftp_script_to_sftp#bye|bye]]'' command.
 +
 +==== quote ====
 +Alias to ''[[guide_ftp_script_to_sftp#literal|literal]]'' command.
 +
 +==== recv ====
 +Alias to ''[[guide_ftp_script_to_sftp#get|get]]'' command.
 +
 +Note that WinSCP also supports ''recv'' alias.
 +
 +==== rename ====
 +Use ''[[scriptcommand_mv|mv]]'' command.
 +
 +Note that WinSCP also supports ''rename'' alias.
 +
 +==== rmdir ====
 +Use ''[[scriptcommand_rmdir|rmdir]]'' command.
 +
 +==== send ====
 +Alias to ''[[guide_ftp_script_to_sftp#put|put]]'' command.
 +
 +Note that WinSCP also supports ''send'' alias.
 +
 +==== type ====
 +Command ''type ascii'' is an alias to ''[[guide_ftp_script_to_sftp#ascii|ascii]]'' command.
 +
 +Command ''type binary'' is an alias to ''[[guide_ftp_script_to_sftp#binary|binary]]'' command.
 +
 +==== user ====
 +In WinSCP, username is specified as part of [[session_url|session URL]] parameter of WinSCP ''open'' command.
 +
 +Example:
 +
 +<code>
 +open ftp.example.com
 +user username
 +password
 +</code>
 +
 +converts to:
 +
 +<code winscp>
 +open sftp://username:password@sftp.example.com
 +</code>
 +
 +==== verbose ====
 +There is no direct equivalent.
 +
 +You can instead enable [[logging|session logging]] using ''/log=<logfile>'' [[commandline|command-line]] parameter:
 +
 +<code>
 +winscp.com /script=script.txt /ini=nul /log=session.log
 +</code>
==== ! (exit to local shell) ==== ==== ! (exit to local shell) ====
Line 198: Line 340:
For more advanced tasks, consider using [[library_powershell|WinSCP .NET assembly from PowerShell script]]. For more advanced tasks, consider using [[library_powershell|WinSCP .NET assembly from PowerShell script]].
 +
 +===== Example =====
 +Command ''ftp.exe -s:script.txt'' with ''script.txt'':
 +<code>
 +prompt
 +open ftp.example.com
 +username
 +password
 +cd /home/user
 +binary
 +mget *.zip
 +close
 +quit
 +</code>
 +
 +converts to command ''winscp.com /script=script.txt /ini=nul'' with ''script.txt'':
 +
 +<code winscp>
 +option batch abort
 +option confirm off
 +open sftp://username:password@sftp.example.com
 +cd /home/user
 +get -transfer=binary *.zip
 +close
 +exit
 +</code>

Last modified: by martin