"No such file or directory" 使用 WinSCP 将带有百分号的本地文件同步到远程目录时

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

我有名称为 %253csvg%2fonload=alert(1)%253e.jpg-131x94

的文件

我正在尝试使用 WinSCP .NET 程序集将文件同步到远程服务器 Session.SynchronizeDirectories

我遇到错误

"No such file or directory"

但是我看到错误中的文件名是%3csvg/onload=alert(1)%3e.jpg-131x94一些单词丢失了。

我使用的是 WinSCP 5.9.6 产品版本。

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

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

WinSCP 默认会URL-解码本地文件名。

如果您不想这样做,可以关闭此功能:

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

参考文献: