If statement 信息指挥任务

If statement 信息指挥任务,if-statement,dos,informatica,If Statement,Dos,Informatica,我在网上问了这个问题,但是没有人知道答案,所以现在我来这里寻求帮助 据我所知,“会话后成功命令”字段中的任何内容都应传递到相应的命令接口并执行。但是,当我使用IF语句时,它失败了。有什么想法吗 "IF 1==1 echo.bob >> f:\filename.txt" 当我将其手动输入终端时(在本例中为DOS),该功能就可以工作。但当我将其投入到可重用的命令任务中时,我得到了以下结果: 错误 后SESS CMN_1949 错误:[会话前/会话后命令]进程id 2996。shell命

我在网上问了这个问题,但是没有人知道答案,所以现在我来这里寻求帮助

据我所知,“会话后成功命令”字段中的任何内容都应传递到相应的命令接口并执行。但是,当我使用IF语句时,它失败了。有什么想法吗

"IF 1==1 echo.bob >> f:\filename.txt"
当我将其手动输入终端时(在本例中为DOS),该功能就可以工作。但当我将其投入到可重用的命令任务中时,我得到了以下结果:

错误
后SESS
CMN_1949
错误:[会话前/会话后命令]进程id 2996。shell命令失败,退出代码为1


PS:使用9.5.1修补程序1,我认为问题不在于Informatica如何执行命令。问题在于DOS如何返回错误代码,特别是一些命令,如
IF
ECHO
不返回错误代码。(从DOS获取的返回代码Informatica可以在DOS中的
echo%ERRORLEVEL%
中看到,为了方便起见,我在这里使用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。我无法解释这一点,不幸的是,我无法在Informatica中实际测试这一点,因为我们在UNIX下运行,但我非常确定这至少是问题的一部分

要解决此问题,应确保在属性选项卡上设置“如果任何命令失败,则任务失败”选项。这使得Informatica使用
cmd/c
选项,并且由于设置了正确的返回代码,Informatica应该能够正确地识别错误(或成功)。如果仍然无法正常工作,请尝试将命令更改为:

 cmd /c "IF 1==1 echo.uncle >> c:\filename.txt"

欢迎来到stackoverflow!谢谢我一直在寻找这个地方;最后,我发现一个问题还没有得到回答,不得不在配股问题上签字。当你说你手动尝试时,你是否真的使用informatica integration server使用的相同登录登录服务器?@Marek:echo.bob在一条新行上进行了回应。命令任务在没有IF语句的情况下工作得很好。@wetstone:我没有登录到服务器并在那里尝试;我在自己的终端上运行了命令。但是,使用Informatica用户,在Informatica服务器上,我可以成功地回显到提到的文件,因此它不应该是文件或文件夹权限。甚至创建了一个新文件,所以它没有写阻塞。不确定还有什么其他权限会干扰。