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

如何捕获WinSCP退出码并合并SSIS中的文件复制任务?

针对你的SSIS场景解决方案

问题1:捕获WinSCP退出码并控制后续任务执行

完全可以实现!按以下步骤操作即可:

  1. 创建存储退出码的变量
    在SSIS包的「变量」面板里新建一个整型变量,比如命名为WinSCPExitCode,将作用域设为整个包。

  2. 配置WinSCP的Execute Process Task
    编辑该任务,切换到「Process」选项卡:

    • 在「ExitCodeVariable」下拉框中选中刚才创建的@[User::WinSCPExitCode]
    • 关键设置:把任务的「FailPackageOnFailure」和「FailParentOnFailure」都改为False。这样即使WinSCP返回非0退出码(比如你提到的1),任务不会直接标记为失败,而是把退出码存入变量,方便后续判断。
  3. 用优先约束控制后续任务触发
    选中WinSCP任务到复制任务之间的箭头(优先约束),右键选择「编辑」:

    • 把「约束类型」改成Expression and Constraint
    • 「约束」选择「Success」(确保WinSCP任务是正常执行完成,而非崩溃终止)
    • 在「表达式」中输入:@[User::WinSCPExitCode] == 0
      这样只有当WinSCP成功下载文件(退出码为0)时,后续的复制任务才会启动。

补充:WinSCP的退出码1一般对应一般性错误(比如未找到目标文件、网络连接失败),0代表操作成功,你可以根据实际需求调整表达式的判断逻辑。

问题2:合并多个文件复制步骤到一个Execute Process Task

当然没问题!你只需要把多个copy命令通过CMD的命令串联符合并成一个参数即可,具体做法:

  1. 构造合并后的CMD参数
    用&(不管前一个命令是否成功都执行后续命令)或者&&(前一个命令成功才执行后一个)连接多个copy命令,再用双引号包裹整个命令串。针对你的场景,示例如下:

    /C "copy /b G:\USER_DATA\USER_USER_SYNC\Download\Test1.csv G:\USER_DATA\USER_USER_SYNC\Testing1 & copy /b G:\USER_DATA\USER_USER_SYNC\Download\Test1.csv G:\USER_DATA\USER_USER_SYNC\Testing2"
    

    如果想更严谨,还可以加上文件存在判断,避免因文件不存在导致复制报错:

    /C "if exist G:\USER_DATA\USER_USER_SYNC\Download\Test1.csv (copy /b G:\USER_DATA\USER_USER_SYNC\Download\Test1.csv G:\USER_DATA\USER_USER_SYNC\Testing1 & copy /b G:\USER_DATA\USER_USER_SYNC\Download\Test1.csv G:\USER_DATA\USER_USER_SYNC\Testing2)"
    
  2. 配置单个Execute Process Task
    新建或修改一个Execute Process Task:

    • 「Executable」选择C:\Windows\System32\cmd.exe
    • 「Arguments」中填入上面构造好的命令参数即可。

这样一个任务就能完成多文件复制操作,减少包内任务数量,更易维护。


内容的提问来源于stack exchange,提问作者Vikrant Singh Rana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:22:49