問題は Informatica がコマンドを実行する方法ではないと思います。問題は、DOS がエラー コードを返す方法にあり、具体的には、一部のコマンドが likeIFとECHOdo'nt にあることにあります。(Informatica が DOS から取得したリターン コードは DOS で確認できますecho %ERRORLEVEL%。Windows では厳密には正しくありませんが、ここでは便宜上 DOS という名前を使用します)
次のコマンドを連続して実行します。
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%
その後はすべてECHO1 が返され、Informatica は両方とも失敗します。
これは、Informatica の各セッション後の成功コマンドが独自の cmd-shell で実行されるため、依然として奇妙であると述べているため、ERRORLEVELすべてのコマンドの初期値は常に 0 である必要があります。それを説明することはできず、残念ながらこれを実際にテストすることはできませんUNIX で実行している Informatica では、これが少なくとも問題の一部であると確信しています。
この問題を回避するには、プロパティ タブで [コマンドが失敗した場合にタスクを失敗させる] オプションを設定する必要があります。これにより、Informatica はcmd/cオプションを使用し、適切なリターン コードが設定されるため、Informatica はエラー (または成功) を正しく検出できるはずです。それでもうまくいかない場合は、コマンドを次のように変更してみてください。
cmd /c "IF 1==1 echo.uncle >> c:\filename.txt"