要跳过文件夹添加-File
切换到Get-ChildItem
(正如@Scepticalist 已经评论的那样):
$filelist = Get-ChildItem -File C:\Users\Administrator\Desktop\ftp
尽管您可以使用更少的代码实现相同的目的,但如果您让 WinSCP 迭代文件(并跳过文件夹):
$transferOptions = New-Object WinSCP.TransferOptions
$transferOptions.TransferMode = [WinSCP.TransferMode]::Binary
$transferOptions.FileMask = "|*/" # Exclude the folders
$transferResult = $session.PutFiles(
"C:\Users\Administrator\Desktop\ftp\*", "/", $False, $transferOptions)
foreach ($transfer in $transferResult.Transfers)
{
Write-Host "Upload of $($transfer.FileName) succeeded"
Move-Item $transfer.FileName $backupPath
}
而且你不需要任何Get-ChildItem
call.
以上基本上是WinSCP文章中的代码上传成功后将本地文件移至其他位置 https://winscp.net/eng/docs/script_local_move_after_successful_upload,只需一个排除子文件夹 https://winscp.net/eng/docs/faq_script_non_recursive.
但请注意,您的代码(与文章相反)没有成功上传的测试。因此,您甚至可以移动无法上传的文件。确保添加$transfer.Error -eq $Null
test.
foreach ($transfer in $transferResult.Transfers)
{
# Success or error?
if ($transfer.Error -eq $Null)
{
Write-Host "Upload of $($transfer.FileName) succeeded, moving to backup"
# Upload succeeded, move source file to backup
Move-Item $transfer.FileName $backupPath
}
else
{
Write-Host "Upload of $($transfer.FileName) failed: $($transfer.Error.Message)"
}
}