web-dev-qa-db-ja.com

ERRORLEVELをゼロにリセットする最も簡単な方法は何ですか?

C#プロジェクトのいくつかのコマンドを実行するビルド後イベントがあります。最後のコマンドにより、ERRORLEVEL値がゼロにならないことがあり、ビルドが失敗します。

ERRORLEVEL値を常にゼロに設定するために、コマンドの追加行を追加したい。それを行う最も便利な方法は何ですか?

64
user95319

「exit 0」はこの問題に対処する良い方法のように見えることがわかりました。

使用例:

NET STOP UnderDevService/Y

出口0

underDevServiceサービスが開始されていない場合。

17
user95319

exit /b 0を使用すると、親も終了せずに、子バッチスクリプト内からerrorlevel 0を返すことができます。

63
akf

トリックをするようです:

ver > nul

すべてが機能するとは限らず、その理由は明らかではありません。たとえば、次のことは行いません。

echo. > nul
cls > nul
48
Jason Kresowaty

ビルド前またはビルド後イベントで、実行可能ファイルのリターンコードがゼロより大きく、実行可能ファイルへの呼び出しがビルド前またはビルド後イベントの最後の行でない場合、簡単な方法でミュートして回避するゼロ以外のerrorlevelのチェックをトリガーするには、失敗した行の後に明示的にゼロを返す行を続けます。

cmd /c "exit /b 0"

これは本質的に、ビルド前またはビルド後イベントの最終行であるjust以上で機能する前述のソリューションの一般的な組み合わせです。

29
Jeffrey

私は個人的にこれを使用します:

cd .

UNIX Shellでも動作します。

しかし、これは少し速いかもしれません:

type nul>nul

Process Monitorcd .QueryDirectory呼び出しを示すため

PS:cd .には、Unixシェルに別の素晴らしい副作用があります。消去前に開かれている場合、ターミナルで再作成された作業ディレクトリを復元します。

8
Andry

VERIFYまたはVERIFY > nulを使用します

7
ixe013

これが「ビルド後イベント」などのようなスニペットである場合、次のように追加できます。

(...) || ver > nul

最後のコマンドの最後。

代わりに

cmd /c "exit /b 0"

windowsシェルを知っている読者は、何が起こっているのか、あなたの意図は何であるかを知っているでしょう。

ただし、バッチスクリプトを使用している場合は、akrotの答えの「子バッチスクリプト」に相当する軽量のサブロータインを使用できます。

サブルーチンがあります:

:reset_error
exit /b 0

そして、ちょうど

call :reset_error

必要な場所ならどこでも。

完全な例を次に示します。

@echo off
rem *** main ***

call :raise_error
echo After :raise_error ERRORLEVEL = %ERRORLEVEL%

call :empty
echo After :empty ERRORLEVEL = %ERRORLEVEL%

call :reset_error
echo After :reset_error ERRORLEVEL = %ERRORLEVEL%

:: this is needed at the end of the main body of the script
goto:eof

rem *** subroutines ***

:empty
goto:eof

:raise_error
exit /b 1

:reset_error
exit /b 0

どの出力:

After :raise_error ERRORLEVEL = 1
After :empty ERRORLEVEL = 1
After :reset_error ERRORLEVEL = 0

ご覧のとおり、goto:eofを介して呼び出して戻るだけでは不十分です。

3
Tomasz Gandor

以下に、ErrorLevel状態をリセットする他の方法を示します。これは、MS-DOSでも機能します(少なくともバージョン6.22の場合)。

more < nul > nul

rem // The `> nul` part can be omitted in Windows but is needed in MS-DOS to avoid a line-break to be returned:
sort < nul > nul

次の方法は、MS-DOSでのみ機能します。

command /? > nul

fc nul nul > nul

完全を期すために、これはErrorLevel状態を1に設定します。これはWindowsとMS-DOSの両方に有効です:

< nul find ""
0
aschipfl

失敗する可能性のある各コマンドの後に>nulを追加します-これにより、ビルドの失敗を防ぐことができます。

%errorlevel%を調べることで、コマンドの結果を確認できます。

例えば:

findstr "foo" c:\temp.txt>nul & if %errorlevel% EQU 0 (echo found it) else (echo didn't find it)
0
Chiefy