This is an old revision of the document!
Useful Scripts
- Uploading a single file
- Upload to multiple servers / Parametrized script
- Downloading file to timestamped-filename
- Downloading the most recent file
- Checking file existence
- Moving local files to different location after successful upload
Advertisement
- Shortcut to synchronize any local directory with remote directory
- Automatically compress files before download
- Running WinSCP from VB.NET
- Other Examples
- Automatically compress files before download
- Other Examples
- Shortcut to synchronize any local directory with remote directory
- Automatically compress files before download
- Further Reading
- Other Examples
- Other Examples
- Shortcut to synchronize any local directory with remote directory
- Automatically compress files before download
- Further Reading
- Other Examples
- Automatically compress files before download
- Other Examples
- Shortcut to synchronize any local directory with remote directory
- Automatically compress files before download
- Further Reading
- Other Examples
- Other Examples
Advertisement
Shortcut to synchronize any local directory with remote directory
You may want to have a script that synchronizes any local directory with a same-named subdirectory of fixed remote path, e.g.:
c:\www\gallery
with/home/user/www/gallery
;c:\users\username\www\forum
with/home/user/www/forum
.
Such a script is particularly useful for integrating with Windows Explorer’s ‘Send To’ menu.
First create wrapper batch file to store the paths you want to synchronize into environment variables (change /home/user/www/
to remote path root you want to synchronize against):
winscp.com /script=example.txt /parameter %1 "/home/user/www/%~n1%~x1"
The script example.txt
may look like:
# Being intended for interactive session, we are not enabling batch mode # Connect open mysession # Synchronize paths provided via environment variables synchronize remote "%1%" "%2%"
Then you can make a shortcut to the batch file:
- When placed on desktop, you can drop any local directory to it to start synchronization;
- When placed to
C:\Users\username\AppData\Roaming\Microsoft\Windows\SendTo
, you can use Send To > Your Shortcut from context menu of any local directory.
Automatically compress files before download
Following script compresses selected files into tar/gzip archive and downloads it:
option batch abort option confirm off open mysession cd %1% call tar -czf /tmp/archive.tar.gz %2% lpwd get -delete /tmp/archive.tar.gz exit
Launch the above script from batch file like the one below, which automatically decompresses the archive:
winscp.com /script=example.txt /parameter %* if ERRORLEVEL 1 goto error echo Retrieving files succeeded gzip -d archive.tar.gz tar -xf archive.tar del archive.tar exit :error echo Retrieving files failed
Advertisement
Example of running the batch file to download all files under /home/user/www
:
example.bat /home/user/www *.*
The batch file needs Windows ports of gzip
and tar
tools. You can get them from UnxUtils project.
Running WinSCP from VB.NET
WinSCP .NET assembly mostly deprecates techniques demostrated in this article. Using the assembly is now preferred approach for advanced automation tasks with WinSCP.
Following is more robust alternative to simple example contained in guide to SFTP file transfers in .NET.
Imports System Imports System.IO Imports System.Diagnostics Imports System.Xml Imports System.Xml.XPath Imports System.Configuration.ConfigurationManager Public Class SFTP ' SFTP support, built on WinSCP Public Shared Function PutSFTP(ByRef filename As String, ByRef remotehost As String, ByRef username As String, ByRef password As String, _ Optional ByVal outfilename As String = Nothing, Optional ByVal output As String = Nothing, Optional ByRef errmsg As String = Nothing) As Boolean ' Run hidden WinSCP process Dim winscp As Process = New Process() Dim logname As String = Path.ChangeExtension(Path.GetTempFileName, "xml") With winscp.StartInfo ' SFTPExecutable needs to be defined in app.config to point to winscp.com Try .FileName = AppSettings("SFTPExecutable") If .FileName Is Nothing OrElse .FileName.Length = 0 Then Throw (New Exception("from PutSFTP: SFTPExecutable not set in config file.")) Catch ex As Exception errmsg = ex.Message Return False End Try .Arguments = "/xmllog=" + logname .UseShellExecute = False .RedirectStandardInput = True .RedirectStandardOutput = True .CreateNoWindow = True End With Try winscp.Start() Catch ex As Exception errmsg = "from PutSFTP: Could not run the WinSCP executable " & winscp.StartInfo.FileName & Environment.NewLine & ex.Message Return False End Try ' Feed in the scripting commands With winscp.StandardInput .WriteLine("option batch abort") .WriteLine("option confirm off") .WriteLine("open sftp://" & username & ":" & password & "@" & remotehost & "/") If outfilename Is Nothing Then .WriteLine("put " & filename) Else .WriteLine("put " & filename & " """ & outfilename & """") .Close() End With If output IsNot Nothing Then output = winscp.StandardOutput.ReadToEnd() ' Wait until WinSCP finishes winscp.WaitForExit() ' Parse and interpret the XML log ' (Note that in case of fatal failure the log file may not exist at all) If Not File.Exists(logname) Then errmsg = "from PutSFTP: The WinSCP executable appears to have crashed." Return False End If Dim log As XPathDocument = New XPathDocument(logname) Dim ns As XmlNamespaceManager = New XmlNamespaceManager(New NameTable()) ns.AddNamespace("w", "http://winscp.net/schema/session/1.0") Dim nav As XPathNavigator = log.CreateNavigator() ' Success (0) or error? Dim status As Boolean = (winscp.ExitCode = 0) If Not status Then errmsg = "from PutSFTP: There was an error transferring " & filename & "." ' See if there are any messages associated with the error For Each message As XPathNavigator In nav.Select("//w:message", ns) errmsg &= Environment.NewLine & message.Value Next message End If Try My.Computer.FileSystem.DeleteFile(logname) Catch ex As Exception ' at least we tried to clean up End Try Return status End Function End Class
Advertisement
Other Examples
- Guide to scripting/automation;
- Guide to advanced scripting;
- See WinSCP .NET assembly examples for advanced tasks.
Automatically compress files before download
Following script compresses selected files into tar/gzip archive and downloads it:
option batch abort option confirm off open mysession cd %1% call tar -czf /tmp/archive.tar.gz %2% lpwd get -delete /tmp/archive.tar.gz exit
Launch the above script from batch file like the one below, which automatically decompresses the archive:
winscp.com /script=example.txt /parameter %* if ERRORLEVEL 1 goto error echo Retrieving files succeeded gzip -d archive.tar.gz tar -xf archive.tar del archive.tar exit :error echo Retrieving files failed
Example of running the batch file to download all files under /home/user/www
:
example.bat /home/user/www *.*
The batch file needs Windows ports of gzip
and tar
tools. You can get them from UnxUtils project.
Advertisement
Other Examples
- Guide to scripting/automation;
- Guide to advanced scripting;
- See WinSCP .NET assembly examples for advanced tasks.
Shortcut to synchronize any local directory with remote directory
You may want to have a script that synchronizes any local directory with a same-named subdirectory of fixed remote path, e.g.:
c:\www\gallery
with/home/user/www/gallery
;c:\users\username\www\forum
with/home/user/www/forum
.
Such a script is particularly useful for integrating with Windows Explorer’s ‘Send To’ menu.
First create wrapper batch file to store the paths you want to synchronize into environment variables (change /home/user/www/
to remote path root you want to synchronize against):
winscp.com /script=example.txt /parameter %1 "/home/user/www/%~n1%~x1"
The script example.txt
may look like:
# Being intended for interactive session, we are not enabling batch mode # Connect open mysession # Synchronize paths provided via environment variables synchronize remote "%1%" "%2%"
Then you can make a shortcut to the batch file:
- When placed on desktop, you can drop any local directory to it to start synchronization;
- When placed to
C:\Users\username\AppData\Roaming\Microsoft\Windows\SendTo
, you can use Send To > Your Shortcut from context menu of any local directory.
Automatically compress files before download
Following script compresses selected files into tar/gzip archive and downloads it:
option batch abort option confirm off open mysession cd %1% call tar -czf /tmp/archive.tar.gz %2% lpwd get -delete /tmp/archive.tar.gz exit
Advertisement
Launch the above script from batch file like the one below, which automatically decompresses the archive:
winscp.com /script=example.txt /parameter %* if ERRORLEVEL 1 goto error echo Retrieving files succeeded gzip -d archive.tar.gz tar -xf archive.tar del archive.tar exit :error echo Retrieving files failed
Example of running the batch file to download all files under /home/user/www
:
example.bat /home/user/www *.*
The batch file needs Windows ports of gzip
and tar
tools. You can get them from UnxUtils project.
Further Reading
- Guide to scripting/automation;
- WinSCP .NET assembly;
- Using WinSCP .NET Assembly from PowerShell.
- NKRefer : http://technet.microsoft.com/en-us/library/bb490920.aspx;http://technet.microsoft.com/en-us/library/cc754335.aspx
</trailer>
Other Examples
- Guide to scripting/automation;
- Guide to advanced scripting;
- See WinSCP .NET assembly examples for advanced tasks.
- Shortcut to synchronize any local directory with remote directory
- Automatically compress files before download
- Running WinSCP from VB.NET
- Further Reading
Advertisement
Other Examples
- Guide to scripting/automation;
- Guide to advanced scripting;
- See WinSCP .NET assembly examples for advanced tasks.
Shortcut to synchronize any local directory with remote directory
You may want to have a script that synchronizes any local directory with a same-named subdirectory of fixed remote path, e.g.:
c:\www\gallery
with/home/user/www/gallery
;c:\users\username\www\forum
with/home/user/www/forum
.
Such a script is particularly useful for integrating with Windows Explorer’s ‘Send To’ menu.
First create wrapper batch file to store the paths you want to synchronize into environment variables (change /home/user/www/
to remote path root you want to synchronize against):
winscp.com /script=example.txt /parameter %1 "/home/user/www/%~n1%~x1"
The script example.txt
may look like:
# Being intended for interactive session, we are not enabling batch mode # Connect open mysession # Synchronize paths provided via environment variables synchronize remote "%1%" "%2%"
Then you can make a shortcut to the batch file:
- When placed on desktop, you can drop any local directory to it to start synchronization;
- When placed to
C:\Users\username\AppData\Roaming\Microsoft\Windows\SendTo
, you can use Send To > Your Shortcut from context menu of any local directory.
Automatically compress files before download
Following script compresses selected files into tar/gzip archive and downloads it:
option batch abort option confirm off open mysession cd %1% call tar -czf /tmp/archive.tar.gz %2% lpwd get -delete /tmp/archive.tar.gz exit
Advertisement
Launch the above script from batch file like the one below, which automatically decompresses the archive:
winscp.com /script=example.txt /parameter %* if ERRORLEVEL 1 goto error echo Retrieving files succeeded gzip -d archive.tar.gz tar -xf archive.tar del archive.tar exit :error echo Retrieving files failed
Example of running the batch file to download all files under /home/user/www
:
example.bat /home/user/www *.*
The batch file needs Windows ports of gzip
and tar
tools. You can get them from UnxUtils project.
Further Reading
- Guide to scripting/automation;
- WinSCP .NET assembly;
- Using WinSCP .NET Assembly from PowerShell.
- NKRefer : http://technet.microsoft.com/en-us/library/bb490920.aspx;http://technet.microsoft.com/en-us/library/cc754335.aspx
</trailer>
Other Examples
- Guide to scripting/automation;
- Guide to advanced scripting;
- See WinSCP .NET assembly examples for advanced tasks.
Advertisement
Automatically compress files before download
Following script compresses selected files into tar/gzip archive and downloads it:
option batch abort option confirm off open mysession cd %1% call tar -czf /tmp/archive.tar.gz %2% lpwd get -delete /tmp/archive.tar.gz exit
Launch the above script from batch file like the one below, which automatically decompresses the archive:
winscp.com /script=example.txt /parameter %* if ERRORLEVEL 1 goto error echo Retrieving files succeeded gzip -d archive.tar.gz tar -xf archive.tar del archive.tar exit :error echo Retrieving files failed
Example of running the batch file to download all files under /home/user/www
:
example.bat /home/user/www *.*
The batch file needs Windows ports of gzip
and tar
tools. You can get them from UnxUtils project.
Other Examples
- Guide to scripting/automation;
- Guide to advanced scripting;
- See WinSCP .NET assembly examples for advanced tasks.
Advertisement
Shortcut to synchronize any local directory with remote directory
You may want to have a script that synchronizes any local directory with a same-named subdirectory of fixed remote path, e.g.:
c:\www\gallery
with/home/user/www/gallery
;c:\users\username\www\forum
with/home/user/www/forum
.
Such a script is particularly useful for integrating with Windows Explorer’s ‘Send To’ menu.
First create wrapper batch file to store the paths you want to synchronize into environment variables (change /home/user/www/
to remote path root you want to synchronize against):
winscp.com /script=example.txt /parameter %1 "/home/user/www/%~n1%~x1"
The script example.txt
may look like:
# Being intended for interactive session, we are not enabling batch mode # Connect open mysession # Synchronize paths provided via environment variables synchronize remote "%1%" "%2%"
Then you can make a shortcut to the batch file:
- When placed on desktop, you can drop any local directory to it to start synchronization;
- When placed to
C:\Users\username\AppData\Roaming\Microsoft\Windows\SendTo
, you can use Send To > Your Shortcut from context menu of any local directory.
Automatically compress files before download
Following script compresses selected files into tar/gzip archive and downloads it:
option batch abort option confirm off open mysession cd %1% call tar -czf /tmp/archive.tar.gz %2% lpwd get -delete /tmp/archive.tar.gz exit
Launch the above script from batch file like the one below, which automatically decompresses the archive:
winscp.com /script=example.txt /parameter %* if ERRORLEVEL 1 goto error echo Retrieving files succeeded gzip -d archive.tar.gz tar -xf archive.tar del archive.tar exit :error echo Retrieving files failed
Advertisement
Example of running the batch file to download all files under /home/user/www
:
example.bat /home/user/www *.*
The batch file needs Windows ports of gzip
and tar
tools. You can get them from UnxUtils project.
Further Reading
- Guide to scripting/automation;
- WinSCP .NET assembly;
- Using WinSCP .NET Assembly from PowerShell.
- NKRefer : http://technet.microsoft.com/en-us/library/bb490920.aspx;http://technet.microsoft.com/en-us/library/cc754335.aspx
</trailer>
Other Examples
- Guide to scripting/automation;
- Guide to advanced scripting;
- See WinSCP .NET assembly examples for advanced tasks.
Other Examples
- Guide to scripting/automation;
- Guide to advanced scripting;
- See WinSCP .NET assembly examples for advanced tasks.