Lot de Programmation, de gestion des Erreurs, et la Commande de Démarrage

Je commence tout juste à apprendre à écrire le script. J'essaie de comprendre comment le système gère les Niveaux d'Erreur et comment ils peuvent être utilisés dans le traitement des erreurs. Je sais qu'il existe une différence entre la variable d'environnement %ERRORLEVEL% et le Niveau d'Erreur du système. Si je comprends bien, puis le
If ERRORLEVEL 1
code permettrait de contrôler la variable d'environnement avant qu'il vérifie le niveau d'erreur de la commande précédente.

Donc, dans mon programme, je suis en train de l'interface de démarrage/arrêt script de démarrage/arrêt tous les scripts d'une machine (pour les tests, je suis juste en utilisant une seule application notepad.exe à titre d'exemple). J'ai deux scripts wrapper qui va démarrer ou arrêter les applications en passant des arguments au script indépendants. Si il y a une erreur dans le script, il va mettre le niveau à l'aide de la
EXIT /B n

de commande. Une fois que le contrôle est retourné à l'appel de script, il ira à une erreur de manipulation script, si l'état de sortie est non nul.

Au début, j'étais réglage de l' %ERRORLEVEL% à zéro manuellement, puis de le tester pour un message d'erreur après un DÉBUT ou la commande TASKKILL. Mais ensuite j'ai lu que la compensation %ERRORLEVEL% avec
SET ERRORLEVEL=
est une meilleure méthode. Mon problème vient quand je tente de démarrer l'application avec

START "" notepad.exe

Chaque fois que je test la variable errorlevel après cette commande, il est toujours supérieur ou égal à 1, sauf si j'utilise DÉFINIR ERRORLEVEL=0 avant de m'exécuter la commande de démarrage. J'ai inséré le code pour les quatre scripts ci-dessous. Tout aperçu et des conseils seraient grandement appréciés.

appstart.chauve-souris:

@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.chauve-souris:

@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.chauve-souris:

@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

erreur.chauve-souris:

@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
  • Si vous exécutez le code, c'est là où j'obtiens un message d'erreur. Si j'utilise début, il déclenche le bloc-notes très bien sans aucune erreur. Si j'utilise l'arrêter, il s'arrête le bloc-notes, sans erreurs. Si j'utilise l'arrêter de nouveau, il renvoie une erreur comme prévu. Maintenant, si j'utilise démarrer, il devrait démarrer le bloc-notes, sans erreurs à nouveau. Toutefois, si l'instruction après la commande de DÉMARRAGE est vrai et il va à une erreur. Je ne suis pas sûr de savoir pourquoi cela se passe. S'il vous plaît aider!
InformationsquelleAutor grocky | 2011-06-27