Search code examples
powershellwinscpwinscp-net

"No such file or directory" when synchronizing a local file with percent sign to remote directory with WinSCP


I have file with name %253csvg%2fonload=alert(1)%253e.jpg-131x94

I am trying to sync the files to remote server using WinSCP .NET assembly Session.SynchronizeDirectories

I am getting error

"No such file or directory"

But I see the file name in the error is %3csvg/onload=alert(1)%3e.jpg-131x94 some few of the words are missing.

I am using WinSCP 5.9.6 product version.

$FTPSourceFolder = "D:\...\00"
$FTPDestionationFolder = "/storage/../00"

$synchronizationResult = $session.SynchronizeDirectories(
    [WinSCP.SynchronizationMode]::Remote, $FTPSourceFolder,$FTPDestionationFolder, $True, $False) 
$synchronizationResult.check()  

Solution

  • WinSCP will by default URL-decode the local file name.

    If you do not want that, you can turn this feature off:

    $transferOptions = New-Object WinSCP.TransferOptions
    $transferOptions.AddRawSettings("ReplaceInvalidChars", "0")
    $synchronizationResult =
        $session.SynchronizeDirectories(
            [WinSCP.SynchronizationMode]::Remote, 
            $FTPSourceFolder,$FTPDestionationFolder, $True, $False,
            $transferOptions)
    

    References: