Differences

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

faq_batch_file 2019-01-15 faq_batch_file 2023-01-16 (current)
Line 10: Line 10:
echo Starting WinSCP echo Starting WinSCP
winscp.com /log=winscp.log /ini=nul winscp.com /log=winscp.log /ini=nul
-open sftp://username:password@example.com/+open sftp://user:password@example.com/
put d:\examplefile.txt put d:\examplefile.txt
exit exit
Line 16: Line 16:
</code> </code>
-It will execute ''winscp.com'', entering an interactive WinSCP scripting prompt. Now WinSCP will //wait// for you to type your commands (WinSCP is not aware of the batch file). On the other hand ''cmd.exe'' (which interprets the batch file), waits for ''winscp.com'' to close, before it even checks the following batch file lines. Only after you close ''winscp.exe'' (e.g. by typing WinSCP ''exit'' command), ''cmd.exe'' will read the line with the ''open'' command. And ''cmd.exe'' will fail executing it, as it does not know any ''open'' command.+It will execute ''winscp.com'', entering an interactive WinSCP scripting prompt. Now WinSCP will //wait// for you to type your commands (WinSCP is not aware of the batch file). On the other hand ''cmd.exe'' (which interprets the batch file), waits for ''winscp.com'' to close, before it even checks the following batch file lines. Only after you close ''winscp.com'' (e.g. by typing WinSCP ''exit'' command), ''cmd.exe'' will read the line with the ''open'' command. And ''cmd.exe'' will fail executing it, as it does not know any ''open'' command.
To execute WinSCP commands in a batch file, you need to use [[commandline#scripting|''/script'' or ''/command'' switches]]. To execute WinSCP commands in a batch file, you need to use [[commandline#scripting|''/script'' or ''/command'' switches]].
  * With ''/script'' switch, you need to move your WinSCP commands into a separate text file, e.g. ''script.txt'': \\ <code winscp>   * With ''/script'' switch, you need to move your WinSCP commands into a separate text file, e.g. ''script.txt'': \\ <code winscp>
-open sftp://username:password@example.com/+open sftp://user:password@example.com/
put d:\examplefile.txt    put d:\examplefile.txt   
exit exit
Line 33: Line 33:
echo Starting WinSCP echo Starting WinSCP
winscp.com /log=winscp.log /ini=nul /command ^ winscp.com /log=winscp.log /ini=nul /command ^
-    "open sftp://username:password@example.com/" ^+    "open sftp://user:password@example.com/" ^
    "put d:\examplefile.txt" ^     "put d:\examplefile.txt" ^
    "exit"     "exit"
Line 39: Line 39:
</code> </code>
-===== New-line Escaping =====+===== [[newline_escaping]] New-line Escaping =====
-Many examples on this site (including the one above), as well as [[ui_generateurl#script|batch file template]] generated by WinSCP, use [[wp>Batch_file#Escaped_characters_in_strings|new-line escaping]] using the caret symbol ''^'' to allow wrapping a long command line to multiple lines for a better readability:+Many examples on this site (including the one above), as well as [[ui_generateurl#script|batch file template]] generated by WinSCP, use [[wp>Batch_file#Escaped_characters_in_strings|new-line escaping]] using the caret symbol ''^'' to allow wrapping a long command line to multiple lines for better readability:
<code batch> <code batch>
winscp.com /log=winscp.log /ini=nul /command ^ winscp.com /log=winscp.log /ini=nul /command ^
-    "open sftp://username:password@example.com/" ^+    "open sftp://user:password@example.com/" ^
    "get *" ^     "get *" ^
    "exit"     "exit"
Line 52: Line 52:
When reusing/modifying such script, users frequently find that WinSCP seemingly stops processing the commands in a middle or behaves strangely. When reusing/modifying such script, users frequently find that WinSCP seemingly stops processing the commands in a middle or behaves strangely.
-This is commonly caused by an improper syntax of the new-line escaping in the batch file (and as such is not WinSCP issue at all). For the new-line escaping to work as expected, the caret symbol ''^'' has to be the very last character on the line (no spaces after it) and the next line needs to be indented (at least one space at the front).+This is commonly caused by an improper syntax of the new-line escaping in the batch file (and as such is not WinSCP issue at all). For the new-line escaping to work as expected in the batch file, the caret symbol ''^'' has to be the very last character on the line (no spaces after it) and the next line needs to be indented (at least one space at the front).
-===== Double Double-quotes =====+===== [[quotes]] Double Double-quotes =====
When using ''/command'' switch, each script command needs to be surrounded by double quotes. As parameters of commands themselves may need to be surrounded by double quotes, those need to be doubled. When using ''/command'' switch, each script command needs to be surrounded by double quotes. As parameters of commands themselves may need to be surrounded by double quotes, those need to be doubled.
For details, see [[commandline#syntax|escaping the in-command double-quotes by doubling them]]. For details, see [[commandline#syntax|escaping the in-command double-quotes by doubling them]].
 +
 +===== [[percent]] Percent Sign =====
 +
 +If your WinSCP command-line contains percent sign, for example to [[session_url#special|encode special characters in session URL]] (particularly in the credentials), it may conflict with special meaning of the percent sign in Windows batch files.
 +
 +You need to double the percent sign to escape it.
 +
 +For example in the following batch file, the username ''user@domain'' contains the ''@'' sign. As the ''@'' sign has a special meaning in the session URL, it needs to be encoded to ''%40''. But as ''%'' sign has a special meaning in the batch file, it needs to be escaped as ''<nowiki>%%</nowiki>'', resulting in final ''<nowiki>%%40</nowiki>''.
 +
 +<code batch>
 +winscp.com /log=winscp.log /ini=nul /command ^
 +    "open sftp://user%%40domain:password@example.com/" ^
 +    "get *" ^
 +    "exit"
 +</code>
 +
 +You can avoid the problem by specifying the credentials using the [[scriptcommand_open#username|''-username'']] and [[scriptcommand_open#password|''-password'']] switches:
 +
 +<code batch>
 +winscp.com /log=winscp.log /ini=nul /command ^
 +    "open sftp://example.com/ -username=user@domain -password=password" ^
 +    "get *" ^
 +    "exit"
 +</code>
 +

Last modified: by martin