Powershell 在成功与WinSCP.NET程序集进行远程到本地同步后,提取子文件夹和文件的名称

Powershell 在成功与WinSCP.NET程序集进行远程到本地同步后,提取子文件夹和文件的名称,powershell,sftp,winscp,winscp-net,Powershell,Sftp,Winscp,Winscp Net,我的工作使用WinSCP.NET汇编进行SFTP传输。成功地将文件从服务器传输到本地后,我只想列出已同步的文件和文件夹的名称(不包括路径) 我在PowerShell工作 这是我的远程文件的树结构:/home/etc/ 文件夹:foldername1,foldername2。在每个foldername?下,我都有文件matricule*.pdf foldername1 ---->矩阵12455-126.pdf ---->矩阵12456-125.pdf 文件夹名称2 ---->矩阵1249-127.

我的工作使用WinSCP.NET汇编进行SFTP传输。成功地将文件从服务器传输到本地后,我只想列出已同步的文件和文件夹的名称(不包括路径)

我在PowerShell工作

这是我的远程文件的树结构:
/home/etc/

文件夹:
foldername1
foldername2
。在每个
foldername?
下,我都有文件
matricule*.pdf

foldername1
---->矩阵12455-126.pdf
---->矩阵12456-125.pdf
文件夹名称2
---->矩阵1249-127.pdf
---->矩阵1241-128.pdf
我尝试了以下脚本:

$filename = [WinSCP.RemotePath]::EscapeFileMask($download.FileName)
Write-Host "*** $filename ***" 
$matr = (Split-Path -Path $filename -Leaf).Split(".")[0];
Write-Host "*** $matr ***"
它显示了整个路径:

/home/etc/foldername1/matricule12455-126.pdf
矩阵12455-126
因此,我想要这样:

foldername1-12455-126
文件夹名称1-12456-125
文件夹名称2-1249-127
文件夹名称2-1241-128
用于获取所有下载文件的列表。源文件的完整路径位于中

然后迭代列表,从文件路径中删除同步根路径,并进行所需的其他修改:

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

# Bitvise SFTP
$results = $session.SynchronizeDirectories(
    [WinSCP.SynchronizationMode]::Local, $localPath, $remotePath, $False)
$results.Check()

$remotePath = [WinSCP.RemotePath]::AddDirectorySeparator($remotePath)

foreach ($download in $results.Downloads)
{
    $filename = $download.FileName
    if (-not $filename.StartsWith($remotePath))
    {
        # Should never happen
        Write-Host "File path $filename does not start with root path $remotePath"
    }
    else
    {
        # Remove synchronization root path from the file path
        $filename = $filename.SubString($remotePath.Length)
        # Replace path separators with dashes
        $filename = $filename.Replace("/", "-")
        # Remove "matricule"
        $filename = $filename.Replace("matricule", "")
        # Remove file extension (it would also remove file path, but there is none)
        $filename = [IO.Path]::GetFileNameWithoutExtension($filename)
        Write-Host $filename
    }
}
这将产生:

foldername1-12455-126
文件夹名称1-12456-125
文件夹名称2-1241-128
文件夹名称2-1249-127