我认为问题不在于 Informatica 如何执行命令。问题在于 DOS 如何返回错误代码,特别是某些命令,比如喜欢IF
和不喜欢ECHO
。(可以echo %ERRORLEVEL%
在 DOS 中看到 Informatica 从 DOS 获取的返回码,为了方便起见,我将在此处使用名称 DOS,尽管现在在 Windows 下这并不完全正确)
连续运行这些命令:
REM "cd" sets ERRORLEVEL => ERRORLEVEL is set to 0
cd c:\
echo %ERRORLEVEL%
REM "echo" does not set ERRORLEVEL => ERRORLEVEL is left unchanged
echo.bob >> c:\filename.txt
echo %ERRORLEVEL%
REM "echo" does not set ERRORLEVEL => ERRORLEVEL is left unchanged
echo.bob >> c:\thisdirdontexist\filename.txt
echo %ERRORLEVEL%
第一个CD
设置返回码,在本例中为 0。
以下ECHO
(有或没有 IF 测试)不会更改返回码,因此即使最后一个ECHO
失败,它仍然为 0。
如果第一个CD
命令会返回错误;
@echo off
REM "cd" sets ERRORLEVEL => ERRORLEVEL is set to 1
cd xxxxxx
echo %ERRORLEVEL%
然后所有后续ECHO
都将返回 1,而 Informatica 将使它们都失败。
这仍然很奇怪,因为 Informatica 中的每个会话后成功命令都是在其自己的 cmd-shell 下执行的,因此ERRORLEVEL
每个命令的初始值都应始终为 0。我无法解释,不幸的是我无法实际测试这个在我们在 UNIX 下运行的 Informatica 中,但我很确定这至少是问题的一部分。
要解决此问题,您应确保在属性选项卡上设置“如果任何命令失败则任务失败”选项。这使得 Informatica 使用该cmd/c
选项,并且由于这设置了正确的返回代码,Informatica 应该能够正确地识别错误(或成功)。如果这仍然无法正常工作,请尝试自己将命令更改为:
cmd /c "IF 1==1 echo.uncle >> c:\filename.txt"