我覺得這個問題是不是在Informatica的是如何執行命令。問題在於DOS如何返回錯誤代碼,特別是一些命令,如IF
和ECHO
does not。 (Informatica在DOS下的返回碼可以在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試驗)不改變返回代碼,從而它仍然0即使最後ECHO
失敗。
如果第一個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"
歡迎來到stackoverflow! –
謝謝!我一直在尋找這個地方;終於找到了一個還沒有回答的問題,並且不得不註冊 – Taejang
我猜想一個供應問題。如果你認爲你手動嘗試了它,你實際上是否使用與informatica集成服務器使用的登錄名登錄服務器? – whetstone