首页 > 解决方案 > 移动不同文件夹中的文件,但在每个文件夹中排除一个子文件夹

问题描述

我正在尝试更改 Powershell 脚本,以便它可以移动一些文件但排除特定的子文件夹,但似乎无法正确处理。

首先,脚本将一些文件结构上传到 FTP - 一个有效。但是当文件上传时,我希望将它们从源移动到 Uploaded 文件夹。这样我可以控制文件不会再次上传,因为我排除了上传的文件夹。

文件结构如下。这些文件位于 PurchOrderNavn 和 PurchPackingSlipNav 中,当它们上传到 FTP 时,我需要将它们移动到 Uploaded 文件夹。

文件结构1

我的上传脚本在那里,如您所见,我正在考虑在最后部分进行移动,但再次不确定如何完成。也许换一种方式更容易。

# Put network share into array
$localePathArray = @(
    "\\network share\Optimate"
)
# Put FTP share into array
$remotePathArray = @(
    "/Optimate/"
)
# Load WinSCP .NET assembly
Add-Type -Path "C:\Program Files (x86)\WinSCP\WinSCPnet.dll"

# Session.FileTransferred event handler


function FileTransferred
{
param($e)


if ($e.Error -eq $Null)
{
    Write-Host "Upload of $($e.FileName) succeeded"
}
else
{
    Write-Host "Upload of $($e.FileName) failed: $($e.Error)"
}

if ($e.Chmod -ne $Null)
{
    if ($e.Chmod.Error -eq $Null)
    {
        Write-Host "Permissions of $($e.Chmod.FileName) set to $($e.Chmod.FilePermissions)"
    }
    else
    {
        Write-Host "Setting permissions of $($e.Chmod.FileName) failed: $($e.Chmod.Error)"
    }

}
else
{
    Write-Host "Permissions of $($e.Destination) kept with their defaults"
}

if ($e.Touch -ne $Null)
{
    if ($e.Touch.Error -eq $Null)
    {
        Write-Host "Timestamp of $($e.Touch.FileName) set to $($e.Touch.LastWriteTime)"
    }
    else
    {
        Write-Host "Setting timestamp of $($e.Touch.FileName) failed: $($e.Touch.Error)"
    }

}
else
{
    # This should never happen during "local to remote" synchronization
    Write-Host "Timestamp of $($e.Destination) kept with its default (current time)"
}
}

 # Main script

 try
 {


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

$session = New-Object WinSCP.Session

$TransferOptions = New-Object WinSCP.TransferOptions 
$TransferOptions.FileMask = "|*/Uploaded/" #uploader filer og mapper, og sletter dem som ikke findes, undtaget sync files
#$TransferOptions.FileMask = "null" #Filtrer intet fra, så alt i mapperne uploades

try
{

# Will continuously report progress of synchronization
$session.add_FileTransferred( { FileTransferred($_) } )

#Logging
$session.SessionLogPath = "C:\scripts\FTP\logs\Nav sync.log"

# Connect
$session.Open($sessionOptions)

# Synchronize files
for ($i=0; $i -lt $localePathArray.length; $i++) {
   # Write-Host "$localePathArray[$i] $remotePathArray[$i]"

    #$synchronizationResult = $session.SynchronizeDirectories([WinSCP.SynchronizationMode]::Remote, 
    $localePathArray[$i], $remotePathArray[$i], $True, $False, [WinSCP.SynchronizationCriteria]::Time, $TransferOptions) #$true sletter filer fra ftp, som er blevet slettet på filserver, sæt den til $False hvis dette ikke ønskes
    $synchronizationResult = $session.SynchronizeDirectories([WinSCP.SynchronizationMode]::Remote, 
    $localePathArray[$i], $remotePathArray[$i], $False, $False, [WinSCP.SynchronizationCriteria]::Time, $TransferOptions) #$true sletter filer fra ftp, som er blevet slettet på filserver, sæt den til $False hvis dette ikke ønskes
   }

# Throw on any error
$synchronizationResult.Check()

}
finally
{
$session.Dispose()

# Move uploaded files

}
exit 0
}
catch
{
Write-Host "Error: $($_.Exception.Message)"
exit 1
}

标签: powershell

解决方案


推荐阅读