If statement 信息指挥任务
我在网上问了这个问题,但是没有人知道答案,所以现在我来这里寻求帮助 据我所知,“会话后成功命令”字段中的任何内容都应传递到相应的命令接口并执行。但是,当我使用IF语句时,它失败了。有什么想法吗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 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服务器上,我可以成功地回显到提到的文件,因此它不应该是文件或文件夹权限。甚至创建了一个新文件,所以它没有写阻塞。不确定还有什么其他权限会干扰。