WinSCP 脚本将所有匹配掩码的文件递归上传到同一文件夹

WinSCP Script upload recursivelly all files matching a mask to the same folder

我有一个从批处理文件调用的文本文件,它没有将文件递归地放入 FTP 站点。文件夹结构有子文件夹,其中包含我要在许多其他文件中复制的文件。 put 文件只复制 C:\storage 而已。阅读文档并尝试其他方法后仍然无法递归复制文件。 (没有要使用子文件夹中的 RDF 复制的文件夹)

文件夹结构在不同 PC 上是随机的:

  1. C:\storage286.S-92A.920024*.RDF
  2. C:\Storage\folder1286.S-92A.920024*.RDF
  3. C:\Storage\storage2\folder2286.S-92A.920024*.RDF

RDF 文件很多,但我感兴趣的通配符是您在上面看到的那个。基本上我想 select 所有 *.RDF(作为上面所有子文件夹的通配符),但不希望将子文件夹复制到远程。

请看下面的代码。

option batch continue
option confirm off
option reconnecttime 900
open ftp://companyuser:!password@ftpsite.com/    
lcd "C:\storage"
put "C:\storage286.S-92A.920024*.RDF"   "/"
put "C:\storage\*286.S-92A.920024*.RDF" "/"
close 
exit

查看 https://winscp.net/eng/docs/commandline

上的文档

您可以使用命令行winscp.com

你的脚本看起来不错,应该需要用 winscp.com

调用

对于 Linux 上的 ftp 客户端,mput/mget(多文件操作),命令可用但 WinScp 不可用。

您可以尝试一些解决方法,例如首先使用 mkdir 命令(使用 winscp.com)创建文件夹,然后使用 synchronize 选项和 winscp.exe 来更新文件夹内容。

仅使用 WinSCP 脚本进行此类自定义处理并不容易。

但是有了WinSCP .NET assembly from a PowerShell script,就不难了:

# Load WinSCP .NET assembly
Add-Type -Path "WinSCPnet.dll"

# Set up session options
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
    Protocol = [WinSCP.Protocol]::Ftp
    HostName = "ftp.example.com"
    UserName = "username"
    Password = "password"
}

$session = New-Object WinSCP.Session

Write-Host "Connecting ..."
$session.Open($sessionOptions)

$localPath = "C:\storage"
$remotePath = "/"
$wildcard = "78286.S-92A.920024*.RDF"
$localFiles = Get-ChildItem -Include $wildcard -Recurse -Path $localPath

foreach ($localFile in $localFiles)
{
    Write-Host "Uploading $($localFile.FullName)..."
    $session.PutFiles($localFile.FullName, $remotePath).Check()
}

只需提取 WinSCP .NET assembly package 的内容以及脚本(比如 flatupload.ps1)和 运行 就像:

powershell -ExecutionPolicy Bypass -File flatupload.ps1

代码部分基于 WinSCP 示例 Recursively move files in directory tree to/from SFTP/FTP server while preserving source directory structure

另见 WinSCP 论坛问题 Ignore folder structure when copying the files