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へ
間違った場所で[遅延拡張](http://stackoverflow.com/a/30284028/2152082)を使用することはできますか? – Stephan
@Stephan私はスクリプトの初めから使っています(サイクルを必要とすることが分かっていない時は本当に分かりません)、どうすればエラーコードに関連したものを混乱させることができますか? – mechanic
よく ' - errorlevel! 'を使うべきブロックの中で'%errorlevel% 'を使ってください。'%cmd% 'の代わりに'!cmd!'を使う理由はありません(私はそこには言いません_理由はありませんが、私が見ることから、何もありません) – Stephan