批处理脚本输出值无法存入SSIS变量:问题排查请求
排查SSIS中批处理脚本存储WinSCP检查结果的问题
原批处理脚本的核心问题
- 未将结果输出到标准输出:SSIS的
StandardOutputVariable捕获的是批处理打印到控制台的内容,原脚本仅在内部设置变量,未通过echo输出结果,导致SSIS无法获取值。 - 变量赋值的空格错误:
set fileexist = 0中等号两边的空格会让变量名变成fileexist(带末尾空格)、值变成0(带头空格),即使后续输出也会出现格式问题。 - WinSCP输出干扰:WinSCP执行命令时会输出会话信息,这些冗余内容会混入标准输出,导致SSIS无法拿到纯净的0或1。
修正后的批处理脚本
@echo off set REMOTE_PATH=/D:/TRANSFERS/IN/FILE.TXT cd "C:\Program Files (x86)\WinSCP\" :: 执行WinSCP命令,将无关输出重定向到空 WinSCP.com /command ^ "open ftptwo" ^ "stat %REMOTE_PATH%" ^ "exit" >nul 2>&1 :: 根据错误码输出结果到标准输出 if %ERRORLEVEL% equ 0 ( echo 0 exit /b 0 ) else ( echo 1 exit /b 1 )
关键修正说明
- 用
>nul 2>&1把WinSCP的所有输出(标准输出、错误输出)重定向到空,避免冗余信息干扰SSIS捕获结果。 - 直接通过
echo 0或echo 1将结果打印到标准输出,让SSIS的StandardOutputVariable能准确获取纯净的数字值。 - 简化逻辑,去掉不必要的内部变量设置,直接依据
ERRORLEVEL判断并输出结果。
SSIS配置注意事项
- 确认
Execute Process Task的StandardOutputVariable指定为字符串类型的fileexist变量。 - 在
Precedence Constraint Editor中使用表达式约束:- 右侧分支:
@[User::fileexist] == "0" - 左侧分支:
@[User::fileexist] == "1"
- 右侧分支:
内容的提问来源于stack exchange,提问作者Junsh
相关产品推荐
相关产品推荐

