This is an old revision of the document!

Downloading all files from FTP/SFTP to the same local folder

When downloading a remote directory tree, WinSCP recreates an equivalent tree locally.

If you want to download all files (or all files matching a certain criteria) from the remote directory tree to the same local folder, it is more complicated.

= Using WinSCP .NET Assembly **=**

The following PowerShell script snippet enumerates all remote files matching a filemask, and downloads them one-by-one to the same local folder:

$remotePath = "/remote/path"
$localPath = "C:\local\path"
$mask = "*.txt"
 
$files = $session.EnumerateRemoteFiles(
             $remotePath, $mask, [WinSCP.EnumerationOptions]::AllDirectories)
 
foreach ($fileInfo in $files)
{
    Write-Host "Downloading $($fileInfo.FullName) ..."
    $filePath = [WinSCP.RemotePath]::EscapeFileMask($fileInfo.FullName)
    $session.GetFiles($filePath, $localPath + "\*").Check() 
}

Using WinSCP scripting

It is too complicated to implement this task with a simple scripting. If you do not want to use the .NET assembly, you can at least download the remote directory tree as is, and then flatten it locally:

@echo off
set TMPPATH=%temp%\csvtmp
mkdir "%TMPPATH%"
winscp.com /command ^
    "open sftp://user:password@example.com/" ^
    "get ""/remote/path/*"" -filemask=*.txt ""%TMPPATH%""" ^
    "exit"
for /r "%TMPPATH%" %%f in ("*.*") do move "%%f" "C:\local\path\"
rmdir /s /q "%TMPPATH%"

Further reading

Last modified: by 81.139.121.137