私はどのようにスクリプトに学ぶことを始めています。システムがどのようにエラーレベルを処理し、どのようにエラー処理に使用できるかを理解しようとしています。私は、環境変数%ERRORLEVEL%とシステムのエラーレベルに違いがあることを知っています。私はこれを正しく理解していれば、それは前のコマンドのエラーレベルをチェックする前に、その後、 If ERRORLEVEL 1
コードは、環境変数をチェックします。バッチプログラミング、エラー処理、およびスタートコマンド
だから、私のプログラムの中で、私は(テストのために、私は単なる一例として、一つのアプリケーションのメモ帳を使用しています)指定されたマシンのすべてのスクリプトを停止/起動します起動/停止スクリプトをインタフェースしようとしています。私は独立したスクリプトに引数を渡すことによってアプリケーションを起動または停止する2つのラッパースクリプトを持っています。独立したスクリプトにエラーがある場合は、 EXIT /B n
コマンドを使用してエラーレベルを設定します。制御が呼び出し元のスクリプトに戻されると、終了ステータスがゼロ以外の場合はエラー処理スクリプトに移ります。
最初に私は手動でゼロ、次いでSTARTまたはTASKKILLコマンドの後にエラーをテストするには、%ERRORLEVEL%と設定しました。しかし、その後、私は SET ERRORLEVEL=
と%のERRORLEVEL%でクリアすると、より良い方法であることを読みました。私の問題は、私は私がstartコマンドを実行する前に、私はSET ERRORLEVEL = 0を使用しない限り、それは常に1以上である、このコマンドの後にエラーレベルをテストするたびに
START "" notepad.exe
でアプリを起動しようとしています。以下の4つのスクリプトのコードを挿入しました。どんな洞察とアドバイスも大変ありがとうございます。
appstart.bat:
@echo off
:: Script for application Start
set ERRORLEVEL=
:: ****
:: Additional Batch files will be executed from within this file
:: Example:
:: Call Appbat01.bat
:: The called batch file should set ERRORLEVEL non-zero if error
:: ****
call test.bat -start
if ERRORLEVEL 1 (call error.bat)
echo.
echo Control was returned to appstart.bat...
:: **** End Calls
goto end
:end
appstop.bat:
@echo off
:: Script for application Start
set ERRORLEVEL=
:: ****
:: Additional Batch files will be executed from within this file
:: Example:
:: Call Appbat01.ba
:: The called batch file should set ERRORLEVEL non-zero if error
:: ****
call test.bat -stop
if ERRORLEVEL 1 (call error.bat)
echo.
echo Control was returned to appstop.bat...
:: **** End Calls
goto end
:end
TEST.BAT:
@echo off
if "%1"=="-start" goto :start
if "%1"=="-stop" goto :stop
goto wrongParams
:start
::****
:: Insert start up stripts here...
:: If there is an error, set ERRORLEVEL=1
::****
set ERRORLEVEL=0
echo.
echo ********
echo starting the service...
echo.
::start "" "C:\Program Files\Microsoft Office\office11\winword.exe"
start notepad.exe
if ERRORLEVEL 1 goto error
qprocess notepad.exe
echo *Start.success* ERRORLEVEL is: %ERRORLEVEL%
echo.
goto end
:stop
::****
:: Insert stopping stripts here...
:: If there is an error, set ERRORLEVEL>1
::****
set ERRORLEVEL=0
echo.
echo ********
echo stopping the service...
echo.
qprocess notepad.exe
taskkill /f /im notepad.exe
if ERRORLEVEL 1 goto noProcess
goto end
:noProcess
set ERRORLEVEL=2
echo *noProcess* ERRORLEVEL is now: %ERRORLEVEL%
echo.
exit /b 2
:error
:: Errorhandler. Log application status and cause of error here. Set
:: ERRORLEVEL > 1 before returning to caller.
set ERRORLEVEL=1
echo.
echo **** Error handler inside test.bat ****
echo.
echo *error* ERRORLEVEL is now: %ERRORLEVEL%
echo.
exit /b 1
:wrongParams
:: Output an error if the wrong parameters were passed to this script.
:: Maybe try to self correct the parameter...
set ERRORLEVEL=1
echo.
echo '%1' is an invalid parameter.
echo Usage: %0 [-stop ^| -start]
echo *wrongParams* ERRORLEVEL is now: %ERRORLEVEL%
echo.
exit /b 1
:end
error.bat:
@echo off
echo **** You have reached error.bat ****
echo ERRORLEVEL inside of error.bat is: %ERRORLEVEL%
echo.
::*** Handle error...***
goto error%ERRORLEVEL%
:error2
echo The process could not be stopped for some reason.
goto end
:error1
echo The process had an error in start up.
::*** ***
goto end
:end
あなたがコードを実行している場合、私はエラーを取得する場合には、これがあります。私がstartを使用すると、エラーなしでメモ帳を起動できます。 stopを使用すると、エラーなしでメモ帳が停止します。もう一度stopを使用すると、期待どおりにエラーがスローされます。さて、私がstartを使用すると、エラーなしでメモ帳が起動するはずです。ただし、STARTコマンドの後のifステートメントはtrueで、エラーになります。なぜこれが起こっているのか分かりません。助けてください! – grocky