You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WinSCP PowerShell脚本下载后删除远程文件失败求助

解决WinSCP PowerShell脚本下载后删除远程文件失败的问题

问题根源

  1. 脚本中使用了未定义的$difference变量,WinSCP无法识别要删除的目标文件路径
  2. 错误提示中出现的/Files目录与下载时的/remote路径不一致,存在路径混淆或权限不足的情况

修正后的脚本

$session.Open($sessionOptions)

# 设置传输选项
$transferOptions = New-Object WinSCP.TransferOptions -Property @{
    ResumeSupport = New-Object WinSCP.TransferResumeSupport -Property @{ State = [WinSCP.TransferResumeSupportState]::Off }
}

# 执行文件下载并捕获传输结果
$transferResult = $session.GetFiles("/remote/*.txt", "\\Local\*", $False, $transferOptions)
# 检查下载过程是否存在错误
$transferResult.Check()

# 遍历所有成功下载的文件,删除对应远程文件
foreach ($transfer in $transferResult.Transfers) {
    Write-Host "正在删除远程文件: $($transfer.RemoteFileName)"
    $removeResult = $session.RemoveFiles($transfer.RemoteFileName)
    
    # 验证删除操作结果
    if ($removeResult.IsSuccess) {
        Write-Host "删除成功: $($transfer.RemoteFileName)"
    } else {
        Write-Host "删除失败: $($transfer.RemoteFileName),错误信息: $($removeResult.Failures[0].Message)"
    }
}

关键修改说明

  • 用$transferResult接收GetFiles的返回值,该对象包含所有成功传输的文件详情
  • 通过遍历$transferResult.Transfers获取每个已下载文件的远程完整路径,确保删除的是已成功下载的文件
  • 增加删除结果的检查和日志输出,便于定位删除失败的具体原因

备选批量删除方式(需谨慎使用)

如果确认下载后远程目录中不会新增匹配的文件,可以直接批量删除:

# 批量删除/remote目录下所有.txt文件
$removeResult = $session.RemoveFiles("/remote/*.txt")
$removeResult.Check()

内容的提问来源于stack exchange,提问作者jmmitche

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:15:33