2016-05-18 5 views
0

私は、バッチスクリプトでいくつかの機能があります。返すエラーレベル

:run 
set "CMD=%*" 
<...> 
timeout 300s !CMD! 
if %errorlevel% equ 0 (
    echo !CMD! >> ./!_tool!.OK 
) else (
    echo !CMD! >> ./!_tool!.FAIL 
    echo exitcode= %errorlevel% >> ./FAIL 
    echo ===STOP=== %date% %time% 
    exit /b %errorlevel% 
) 
exit /b %errorlevel% 

とイムメインサイクルでの%エラーレベル%のコードチェック:

for /f "tokens=*" %%t in (%TEST_LIST%) do (
    <...> 
    call :run %TOOL% -O0 -S %REPO_PATH%\%%t 
    if %errorlevel% equ 0 (
     echo %%t PASSED 
    ) else (
     echo %%t FAILED 
    ) 

しかし、問題timeout 300s !CMD! errorlevel 1を返し、exit /b %errorlevel%を1(./!_tool!.FAILが作成されているなど)で返しても、メインサイクルのIFに影響を与えず、imはecho %%t PASSEDとなります。

リターンコードをこのようにチェックすることはできませんか?

P.S.いくつかの<は...>コードが正しく動作しているので、私はそれを私は私の問題を発見した@Stephanへ

+2

間違った場所で[遅延拡張](http://stackoverflow.com/a/30284028/2152082)を使用することはできますか? – Stephan

+0

@Stephan私はスクリプトの初めから使っています(サイクルを必要とすることが分かっていない時は本当に分かりません)、どうすればエラーコードに関連したものを混乱させることができますか? – mechanic

+0

よく ' - errorlevel! 'を使うべきブロックの中で'%errorlevel% 'を使ってください。'%cmd% 'の代わりに'!cmd!'を使う理由はありません(私はそこには言いません_理由はありませんが、私が見ることから、何もありません) – Stephan

答えて

0

おかげでカットしてきました - それはすべての反復

をリフレッシュする必要がありますので、私は私のFORループに代わり %errorlevel%!errorlevel!を使用する必要がありますが
関連する問題