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