不要使用 WinSCP 将整个本地文件夹传输到远程目录,而只传输其中的文件

Posted

技术标签:

【中文标题】不要使用 WinSCP 将整个本地文件夹传输到远程目录,而只传输其中的文件【英文标题】:Do not transfer whole local folder to remote directory using WinSCP but only files in it 【发布时间】:2021-12-29 11:09:04 【问题描述】:

我制作了一个 PowerShell 脚本,将 .txt 和 .csv 文件从本地文件夹传输到远程目录。

我想排除子目录并仅传输本地文件夹中的 .txt 和 .csv 文件。

$transferOptions.FileMask = "*.txt, *.csv |*/";

如果我在此处添加排除掩码| */,则脚本不会执行任何操作。没有文件被传输或排除。

如果我删除它,脚本可以工作,但是整个本地 info 文件夹及其文件被转移到远程目录。

我只想远程传输 .txt 和 .csv 文件,而不是本地文件夹本身。

这就是我脚本的传输部分的样子:

# Set the folder name variables
$DirCustomerData = @("001201", "001753", "001952", "002587", "002833", "002863", "003150", "003716", 

“004826”、“003010”、“004099”、“006222”、“002545”、“006805”、“001433”、“006839”)

$LocalDir = "\customer_data\"+$DirCustomerData[$i]+"\info\"

# Check for files
if((Get-ChildItem $LocalDir | Measure-Object).Count -eq 0)

    "Local directory $LocalDir has currently no files. Skipping to next folder"
    "`n"
 else 
    "Local directory $LocalDir contains "+(Get-ChildItem $LocalDir -Recurse -File -Exclude -Directory | Measure-Object | %$_.Count)+" files. Starting now FTP Upload Session..."
    "`n"
    
    # Retrieve the local files
    $LocalDirFiles = Get-ChildItem $LocalDir

    # Open the FTP Session
    $session = New-Object WinSCP.Session
    $session.Open($sessionOptions)

    # Upload the files
    $transferOptions = New-Object WinSCP.TransferOptions
    $transferOptions.TransferMode = [WinSCP.TransferMode]::Binary
    $transferOptions.FileMask = "*.txt, *.csv";

    $RemoteDir = "/"+$DirCustomerData[$i]+"/info/"

    foreach ($LocalDirFiles in $LocalDir) 

        $transferResult = $session.PutFiles($LocalDir, $RemoteDir, $true, $transferOptions)

        # Throw on any error
        $transferResult.Check()

        # Print results
        foreach ($transfer in $transferResult.Transfers)
        
            Write-Host "Upload of $($transfer.FileName) to remote FTP directory $RemoteDir succeeded."
        
           

您能帮我只传输所需的文件并排除子目录吗?谢谢!

【问题讨论】:

【参考方案1】:

localPath argument of Session.PutFiles 的文档说:

要上传的本地文件或目录的完整路径。路径中的文件名可以替换为 Windows 通配符以选择多个文件。要上传目录中的所有文件,请使用掩码*

您的代码缺少掩码,应该是:

$LocalDir = "\customer_data\"+$DirCustomerData[$i]+"\info\*"

注意*。并且localDir 变量名不计算值的用途。


更直接的方法是使用Session.PutFilesToDirectory,它适用于您当前的路径值:

$session.PutFilesToDirectory($LocalDir, $RemoteDir, $true, $transferOptions)

【讨论】:

以上是关于不要使用 WinSCP 将整个本地文件夹传输到远程目录,而只传输其中的文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 WinSCP 将今天的文件从远程目录同步到本地目录

怎么同步linux文件?如何WinSCP如何设置

winscp中文版 怎么可以同步的快一点

windows与Linux实现文件传输Winscp工具的使用

使用 WinSCP .NET 程序集防止通过 FTP 传输不完整的文件

Windows联系远程服务器操作流程