3

У меня есть файл с именем A.txt, используя пакетную команду для копирования файла на SFTP-сервер. После копирования A.txt, скопируйте A.txt снова в SFTP по тому же пути.Невозможно одно и то же имя с двумя файлами по одному пути, я хочу переименовать второй скопированный файл, например, A2.txt.

Как использовать команду « Новое имя » в командной строке WinSCP?

Я копирую несколько файлов с расширением (* .txt), только хочу переименовать файл, который уже существует с таким же именем в SFTP-сервере.

1 ответ1

3

Команда "Новое имя" в WinSCP GUI не может автоматически переименовывать загруженный файл, чтобы не конфликтовать с существующими файлами.

Также нет такой функции в сценариях WinSCP.


Хотя вы можете кодировать это, используя сборку WinSCP .NET, например, используя скрипт PowerShell:

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

    # Setup session options
    $sessionOptions = New-Object WinSCP.SessionOptions

    # Setup session options
    $sessionOptions = New-Object WinSCP.SessionOptions
    $sessionOptions.Protocol = [WinSCP.Protocol]::Sftp
    $sessionOptions.HostName = "example.com"
    $sessionOptions.UserName = "username"
    $sessionOptions.Password = "password"
    $sessionOptions.SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx..."

    $localPath = "c:\local\path\*.txt"
    $remotePath = "/remote/path/"

    try
    {
        # Connect
        Write-Host "Connecting..."
        $session = New-Object WinSCP.Session
        $session.SessionLogPath = "session.log"
        $session.Open($sessionOptions)

        # Upload files
        Write-Host "Uploading..."

        $localFiles = Get-ChildItem -Path $localPath

        foreach ($localFile in $localFiles)
        {
            $name = $localFile.Name;
            Write-Host "Found file $name"

            $index = 0;
            while ($session.FileExists($remotePath + $name))
            {
                Write-Host "$name exists already in remote directory"
                $index++;
                $name = $localFile.Name + " ($index)"
            }

            Write-Host "Uploading as $name ..."
            $session.PutFiles($localFile, $remotePath + $name).Check()
        }

        Write-Host "Done"
    }
    finally
    {
        # Disconnect, clean up
        $session.Dispose()
    }

    exit 0
}
catch [Exception]
{
    Write-Host $_.Exception.Message
    exit 1
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .