web-dev-qa-db-ja.com

ERRORLEVELを0に設定

インストーラーのラッパーであるバッチファイルがあります。このバッチファイルは、インストーラーによって返されたエラーレベルをチェックし、それに応じて出力します。

(同じコマンドウィンドウ/環境で)バッチファイルを開始する直前のコマンドプロンプトでset ERRORLEVEL=0を実行すると、インストーラーがエラーレベルを変更することはなく、バッチスクリプトは常に成功を返します。 %ERRORLEVEL%はWindowsによって定義された変数であり、プログラムやスクリプトからのエラーを出力するために特別に使用され、バッチファイルなどで変数を使用することは、「自己責任」であると考えられます。別のプロセスによっていつでも変更されました。

どうやら、私が与えられた環境でerrorlevelを設定すると、終了コードのホルダーとしてのerrorlevelの使用が何らかの形で終了します。これがなぜなのか誰か知っていますか?私にとっては、ただの奇妙な予期しない振る舞いです。この件に関する情報があれば大歓迎です!

14
user972276

システム変数を通常のものに再定義しています。これを行うと、システムはコマンドセッションが閉じられるまでそれを使用しません。

最良の方法は使用することです

exit /b 0

別のバッチファイルで、プライマリスクリプトから呼び出します。ここで、0は希望するerrorlevelです。それか、echo、findstrなど、errorlevelをリセットするコマンドを使用します。

たとえば、次のコマンドはすべて、バッチファイル内でERRORLEVELを0に設定します。

VERIFY > nul

cmd /c "exit /b 0"

ver > nul     
14
TwirlMandarin

ERRORLEVEL、PATH、CD、DATE、TIMEなどの動的なシステム変数に独自の値を割り当てないでください。そうすると、コードが動的な値を参照できなくなります。ユーザー定義値を未定義にするだけで、動的な値を復元できます。例えば:

set "errorlevel="

エラーレベルを0に強制したい場合、これは完全に直観的ではありませんが、非常に効果的な構文(call )を使用できます。通話後のスペースは重要です。エラーレベルを1に設定する場合は、(call)を使用できます。電話の後にはスペースがないことが重要です。

(call)
echo %errorlevel%
(call )
echo %errorlevel%

エラーレベルを設定するためのより直感的ではあるがあまり便利ではない方法は、バッチファイルで専用のサブルーチンを使用することです。

call :setErr 1
echo %errorlevel%
call :setErr 0
echo %errorlevel%
exit /b

:setErr
exit /b %1

または、コマンドラインで使用する場合

cmd /c exit 1
echo %errorlevel%
cmd /c exit 0
echo %errorlevel%
12
dbenham

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

cd .

UNIXシェルでも機能します。

8
Andry

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 ""
2
aschipfl

これが私が見つけた唯一の動作です。

call (exit /b 0)

ERRORLEVELを検出するサードパーティスクリプトを使用するスクリプトで必要ですが、エラーレベルを適切にリセットしていません。

1
Richard Meadows

これらも機能します:(エラーレベルを1に設定)

方法1

color 00

方法2

echo A | find "B"

これを使用してエラーレベル1-26を設定することもできます。

echo Your errorlevel<sup>th</sup> character between A-Z | choice /c:Enter A-Z here /n
0
Wasif Hasan