Differences
This shows you the differences between the selected revisions of the page.
guide_ftp_script_to_sftp 2015-08-24 | guide_ftp_script_to_sftp 2022-10-21 (current) | ||
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 FTP file transfer script using [[http://technet.microsoft.com/en-us/library/bb490910.aspx|Windows built-in command-line FTP client]] (''ftp.exe'') to SFTP [[scripting|script using WinSCP]]. | + | This guide explains how to convert existing FTP file transfer script using [[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/ftp|Windows built-in command-line FTP client]] (''ftp.exe'') to SFTP [[scripting|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 [[ftps|FTP over TLS/SSL]], [[scriptcommand_synchronize|synchronization]] or passive mode.((WinSCP defaults to passive mode.)) | + | 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 [[ftps|FTP over TLS/SSL]], [[scriptcommand_synchronize|synchronization]], passive mode,((WinSCP defaults to passive mode.)) [[script_upload_multiple_servers|parametrized script]], [[scripting#timestamp|timestamped file names]], [[script_custom_listing_format_csv|custom directory listing format]], UTF-8 support, preserving file timestamp, recursive downloads and uploads, and others. |
===== [[commandline]] Converting Command-Line ===== | ===== [[commandline]] Converting Command-Line ===== | ||
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 [[#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 [[#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=<logfile>'' parameter. | | + | | ''-d'' | Enable [[logging|session logging]] using ''[[commandline#logging|/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 ''[[scriptcommand_open|open]]'' command. | | | ''-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. Convert the script as documented below. | | + | | ''-s:filename'' | Use ''[[commandline#scripting|/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 35: | Line 35: | ||
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. | 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: | + | For that, add ''[[commandline#configuration|/ini=nul]]'' command-line parameter: |
<code batch> | <code batch> | ||
Line 56: | Line 56: | ||
<code winscp> | <code winscp> | ||
open sftp://username:password@sftp.example.com/ | open sftp://username:password@sftp.example.com/ | ||
+ | </code> | ||
+ | |||
+ | Replace the ''%%sftp://%%'' with the ''%%ftp://%%'', if you keep using the FTP protocol. | ||
+ | |||
+ | ===== [[errors]] 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 [[scriptcommand_option#batch|batch mode]] to ''on'' at the beginning of your script: | ||
+ | <code winscp> | ||
+ | option batch on | ||
</code> | </code> | ||
===== Converting Commands ===== | ===== Converting Commands ===== | ||
- | ==== append ==== | + | |
+ | ==== [[append]] append ==== | ||
Use ''[[scriptcommand_put|put]] -append <localfile> [remotefile]''. | Use ''[[scriptcommand_put|put]] -append <localfile> [remotefile]''. | ||
- | ==== ascii ==== | + | The ''-append'' switch is supported with the SFTP protocol only. |
+ | |||
+ | ==== [[ascii]] ascii ==== | ||
Use ''-transfer=ascii'' switch for all following file transfer commands (''[[scriptcommand_put|put]]'' or ''[[scriptcommand_get|get]]''). | Use ''-transfer=ascii'' switch for all following file transfer commands (''[[scriptcommand_put|put]]'' or ''[[scriptcommand_get|get]]''). | ||
Line 80: | Line 91: | ||
Note that WinSCP also supports ''ascii'' command, but its use is deprecated. | Note that WinSCP also supports ''ascii'' command, but its use is deprecated. | ||
- | ==== bye ==== | + | ==== [[bye]] bye ==== |
Use ''[[scriptcommand_exit|exit]]''. | Use ''[[scriptcommand_exit|exit]]''. | ||
Note that WinSCP also supports ''bye'' alias. | Note that WinSCP also supports ''bye'' alias. | ||
- | ==== binary ==== | + | ==== [[binary]] binary ==== |
Use ''-transfer=binary'' switch for all following file transfer commands (''[[scriptcommand_put|put]]'' or ''[[scriptcommand_get|get]]''). | Use ''-transfer=binary'' switch for all following file transfer commands (''[[scriptcommand_put|put]]'' or ''[[scriptcommand_get|get]]''). | ||
Line 103: | Line 114: | ||
Note that WinSCP also supports ''binary'' command, but its use is deprecated. | Note that WinSCP also supports ''binary'' command, but its use is deprecated. | ||
- | ==== cd ==== | + | ==== [[cd]] cd ==== |
Use ''[[scriptcommand_cd|cd]]'' command. | Use ''[[scriptcommand_cd|cd]]'' command. | ||
- | ==== close ==== | + | ==== [[close]] close ==== |
Use ''[[scriptcommand_close|close]]'' command. | Use ''[[scriptcommand_close|close]]'' command. | ||
- | ==== delete ==== | + | ==== [[delete]] delete ==== |
Use ''[[scriptcommand_rm|rm]]'' command. | Use ''[[scriptcommand_rm|rm]]'' command. | ||
Note that WinSCP also supports ''delete'' alias. | Note that WinSCP also supports ''delete'' alias. | ||
- | ==== dir ==== | + | ==== [[dir]] dir ==== |
Use ''[[scriptcommand_ls|ls]]'' command. | Use ''[[scriptcommand_ls|ls]]'' command. | ||
Line 121: | Line 132: | ||
Note that WinSCP also supports ''dir'' alias. | Note that WinSCP also supports ''dir'' alias. | ||
- | ==== disconnect ==== | + | ==== [[disconnect]] disconnect ==== |
Alias to ''[[scriptcommand_close|close]]'' command. | Alias to ''[[scriptcommand_close|close]]'' command. | ||
- | ==== get ==== | + | ==== [[get]] get ==== |
Use ''[[scriptcommand_get|get]]'' command. | Use ''[[scriptcommand_get|get]]'' command. | ||
Line 142: | Line 153: | ||
</code> | </code> | ||
- | ==== glob ==== | + | ==== [[glob]] glob ==== |
In WinSCP, to escape special characters in filename, use [[file_mask#basic|set pattern]]. | In WinSCP, to escape special characters in filename, use [[file_mask#basic|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]] hash ==== |
WinSCP always prints percentual progress of file transfer when run in console. It does not output progress when redirected to a file. | WinSCP always prints percentual progress of file transfer when run in console. It does not output progress when redirected to a file. | ||
- | ==== lcd ==== | + | ==== [[lcd]] lcd ==== |
Use ''[[scriptcommand_lcd|lcd]]'' command. | Use ''[[scriptcommand_lcd|lcd]]'' command. | ||
- | ==== literal ==== | + | ==== [[literal]] literal ==== |
- | Where are no textual commands in SFTP protocol. You can execute [[remote_command|remote shell commands]] using ''[[scriptcommand_call|call]]'' command. | + | There 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. | With FTP protocol, you can use ''call'' command to execute FTP protocol commands. | ||
- | ==== ls ==== | + | ==== [[ls]] ls ==== |
You can use ''[[scriptcommand_ls|ls]]'' command to list directory contents with full details. | You can use ''[[scriptcommand_ls|ls]]'' command to list directory contents with full details. | ||
- | ==== mdelete ==== | + | ==== [[mdelete]] mdelete ==== |
Use ''[[scriptcommand_rm|rm]]'' command. | Use ''[[scriptcommand_rm|rm]]'' command. | ||
- | ==== mget ==== | + | ==== [[mget]] mget ==== |
Use ''[[scriptcommand_get|get]]'' command. | Use ''[[scriptcommand_get|get]]'' command. | ||
Line 177: | Line 188: | ||
<code> | <code> | ||
ascii | ascii | ||
- | mget index.html about.html | + | mget *.html *.txt |
</code> | </code> | ||
Line 183: | Line 194: | ||
<code winscp> | <code winscp> | ||
- | get -transfer=ascii index.html about.html .\ | + | get -transfer=ascii *.html *.txt .\ |
</code> | </code> | ||
Note that WinSCP also supports ''mget'' as an alias to ''get'' command. | Note that WinSCP also supports ''mget'' as an alias to ''get'' command. | ||
- | ==== mkdir ==== | + | ==== [[mkdir]] mkdir ==== |
Use ''[[scriptcommand_mkdir|mkdir]]'' command. | Use ''[[scriptcommand_mkdir|mkdir]]'' command. | ||
- | ==== mput ==== | + | ==== [[mput]] mput ==== |
- | Use ''[[scriptcommand_get|put]]'' command. | + | Use ''[[scriptcommand_put|put]]'' command. |
You need to map previous ''[[#binary|binary]]'' or ''[[#ascii|ascii]]'' commands to ''-transfer'' switch. | You need to map previous ''[[#binary|binary]]'' or ''[[#ascii|ascii]]'' commands to ''-transfer'' switch. | ||
Line 204: | Line 215: | ||
<code> | <code> | ||
ascii | ascii | ||
- | mput index.html about.html | + | mput *.html *.txt |
</code> | </code> | ||
Line 210: | Line 221: | ||
<code winscp> | <code winscp> | ||
- | put -transfer=ascii index.html about.html ./ | + | put -transfer=ascii *.html *.txt ./ |
</code> | </code> | ||
Note that WinSCP also supports ''mput'' as an alias to ''put'' command. | Note that WinSCP also supports ''mput'' as an alias to ''put'' command. | ||
- | ==== open ==== | + | ==== [[open]] open ==== |
Use ''[[scriptcommand_open|open]]'' command. | Use ''[[scriptcommand_open|open]]'' command. | ||
Line 236: | Line 247: | ||
</code> | </code> | ||
- | convert to: | + | converts to: |
<code winscp> | <code winscp> | ||
Line 242: | Line 253: | ||
</code> | </code> | ||
- | ==== prompt ==== | + | Replace the ''%%sftp://%%'' with the ''%%ftp://%%'', if you keep using the FTP protocol. |
+ | |||
+ | ==== [[prompt]] prompt ==== | ||
WinSCP does not prompt for individual transfers during multi-file transfers, so there's no conversion needed. | WinSCP does not prompt for individual transfers during multi-file transfers, so there's no conversion needed. | ||
- | ==== put ==== | + | ==== [[put]] put ==== |
Use ''[[scriptcommand_put|put]]'' command. | Use ''[[scriptcommand_put|put]]'' command. | ||
Line 264: | Line 277: | ||
</code> | </code> | ||
- | ==== pwd ==== | + | ==== [[pwd]] pwd ==== |
Use ''[[scriptcommand_pwd|pwd]]'' command. | Use ''[[scriptcommand_pwd|pwd]]'' command. | ||
- | ==== quit ==== | + | ==== [[quit]] quit ==== |
Alias to ''[[#bye|bye]]'' command. | Alias to ''[[#bye|bye]]'' command. | ||
- | ==== quote ==== | + | ==== [[quote]] quote ==== |
Alias to ''[[#literal|literal]]'' command. | Alias to ''[[#literal|literal]]'' command. | ||
- | ==== recv ==== | + | ==== [[recv]] recv ==== |
Alias to ''[[#get|get]]'' command. | Alias to ''[[#get|get]]'' command. | ||
Note that WinSCP also supports ''recv'' alias. | Note that WinSCP also supports ''recv'' alias. | ||
- | ==== rename ==== | + | ==== [[rename]] rename ==== |
Use ''[[scriptcommand_mv|mv]]'' command. | Use ''[[scriptcommand_mv|mv]]'' command. | ||
Note that WinSCP also supports ''rename'' alias. | Note that WinSCP also supports ''rename'' alias. | ||
- | ==== rmdir ==== | + | ==== [[rmdir]] rmdir ==== |
Use ''[[scriptcommand_rmdir|rmdir]]'' command. | Use ''[[scriptcommand_rmdir|rmdir]]'' command. | ||
- | ==== send ==== | + | ==== [[send]] send ==== |
Alias to ''[[#put|put]]'' command. | Alias to ''[[#put|put]]'' command. | ||
Note that WinSCP also supports ''send'' alias. | Note that WinSCP also supports ''send'' alias. | ||
- | ==== type ==== | + | ==== [[type]] type ==== |
Command ''type ascii'' is an alias to ''[[#ascii|ascii]]'' command. | Command ''type ascii'' is an alias to ''[[#ascii|ascii]]'' command. | ||
Command ''type binary'' is an alias to ''[[#binary|binary]]'' command. | Command ''type binary'' is an alias to ''[[#binary|binary]]'' command. | ||
- | ==== user ==== | + | ==== [[user]] user ==== |
In WinSCP, username is specified as part of [[session_url|session URL]] parameter of WinSCP ''open'' command. | In WinSCP, username is specified as part of [[session_url|session URL]] parameter of WinSCP ''open'' command. | ||
Line 313: | Line 326: | ||
</code> | </code> | ||
- | ==== verbose ==== | + | Replace the ''%%sftp://%%'' with the ''%%ftp://%%'', if you keep using the FTP protocol. |
+ | |||
+ | ==== [[verbose]] verbose ==== | ||
There is no direct equivalent. | There is no direct equivalent. | ||
- | You can instead enable [[logging|session logging]] using ''/log=<logfile>'' [[commandline|command-line]] parameter: | + | You can instead enable [[logging|session logging]] using ''[[commandline#logging|/log=<logfile>]]'' command-line parameter: |
<code batch> | <code batch> | ||
Line 344: | Line 359: | ||
<code winscp> | <code winscp> | ||
- | option batch abort | ||
- | option confirm off | ||
open sftp://username:password@sftp.example.com/ | open sftp://username:password@sftp.example.com/ | ||
cd /home/user | cd /home/user | ||
Line 352: | Line 365: | ||
exit | exit | ||
</code> | </code> | ||
+ | |||
+ | Replace the ''%%sftp://%%'' with the ''%%ftp://%%'', if you keep using the FTP protocol. | ||