61

バッチファイル内でコマンドかどうかを確認する方法

start "" javaw -jar %~p0/example.jar

成功したか、エラーが発生しましたか?

if/else ステートメントを使用して、この情報をエコーアウトしたいと考えています。

4

5 に答える 5

82

新しいウィンドウが起動するため、これはおそらく機能しませんstartが、質問に答えるには:

コマンドがエラー レベルを返した場合は、次の方法で確認できます。

特定のエラーレベル別

commandhere
if %errorlevel%==131 echo do something

エラーが発生した場合

commandhere || echo what to do if error level ISN'T 0

エラーなしの場合

commandhere && echo what to do if error level IS 0

エラーレベルを返さないが出力を与える場合は、変数でそれをキャッチし、出力によって判断できます。例 (トークンと delim は単なる例であり、特殊文字で失敗する可能性があることに注意してください)

完全な出力を解析することによって

for /f "tokens=* delims=" %%a in ('somecommand') do set output=%%a
if %output%==whateveritwouldsayinerror echo error

または、エラーという単語のような出力で単一のフレーズを探すこともできます

文字列をチェックすることによって

commandhere | find "Error" || echo There was no error!
commandhere | find "Error" && echo There was an error!

そして、一緒に混ぜることもできます(ステートメント|^|if でエスケープすることを忘れないでください)for

お役に立てれば。

于 2013-02-04T17:33:13.787 に答える
50

使用できます

if errorlevel 1 echo Unsuccessful

ある場合には。これは、適切な終了コードを返す最後のコマンドに依存します。異常があったとしても、プログラムが正常に戻った場合は、異常があるとは言えません。

より微妙なアプローチを必要とする Robocopy のようなプログラムには注意してください。返されるエラー レベルは単なるブール情報以上のものを含むビットマスクであり、実際の成功コードは AFAIK, 3 です。

于 2013-02-04T16:57:15.027 に答える
16

ほとんどのコマンド/プログラムは、成功すると 0 を返し、errorlevelエラーを通知するために と呼ばれるその他の値を返します。

たとえば、次のようにして、バッチでこれを確認できます。

call <THE_COMMAND_HERE>
if %ERRORLEVEL% == 0 goto :next
echo "Errors encountered during execution.  Exited with status: %errorlevel%"
goto :endofscript

:next
echo "Doing the next thing"

:endofscript
echo "Script complete"
于 2014-02-10T18:03:54.443 に答える
2

javaw が %errorlevel% 変数に書き込むかどうかはわかりませんが、可能性はあります。

echo %errorlevel%直接実行して確認してください。

それ以外に、 javaw の出力をファイルにパイプしてから、 を使用findして結果を確認できます。その出力を知らなければ、私は本当にあなたを助けることはできません.

于 2013-02-04T17:01:17.000 に答える