powershell - 移动不同文件夹中的文件,但在每个文件夹中排除一个子文件夹
问题描述
我正在尝试更改 Powershell 脚本,以便它可以移动一些文件但排除特定的子文件夹,但似乎无法正确处理。
首先,脚本将一些文件结构上传到 FTP - 一个有效。但是当文件上传时,我希望将它们从源移动到 Uploaded 文件夹。这样我可以控制文件不会再次上传,因为我排除了上传的文件夹。
文件结构如下。这些文件位于 PurchOrderNavn 和 PurchPackingSlipNav 中,当它们上传到 FTP 时,我需要将它们移动到 Uploaded 文件夹。
我的上传脚本在那里,如您所见,我正在考虑在最后部分进行移动,但再次不确定如何完成。也许换一种方式更容易。
# 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
}
解决方案
推荐阅读
- javascript - 如何在 Electron 中注册多个全局快捷方式?
- opencart - 在 Opencart 1.5.6.4 中上传图片时出现问题
- firebase - 为 Firebase 添加价值 (AngularFire)
- c++ - 为什么代码不能返回正确的值?
- algorithm - 寻找行列式的递归函数
- database - 对 apex oracle 数据库应用程序表单进行 pl sql 验证
- go - 使用 golang 1.10.2 连接到带有 IKEv2 证书的 socks5 代理
- unit-testing - 如何获得文件夹的全局测试覆盖率
- python - 全屏模式下的 OpenCV 更改视频纵横比
- javascript - xsl 中的单独条目以便在 php 中进一步传递和更改