Quelle est la façon la plus simple de réinitialiser ERRORLEVEL à zéro?

j'ai un événement post-construction qui exécute certaines commandes pour un projet c#. La dernière commande provoque parfois la valeur ERRORLEVEL qui n'est pas égale à zéro et puis la compilation échoue.

je veux ajouter une ligne de commande supplémentaire pour toujours mettre la valeur ERRORLEVEL à zéro. Quelle est la façon la plus commode de le faire?

56
demandé sur Ross Ridge 2009-07-11 17:31:36

10 réponses

si vous utilisez exit /b 0 vous pouvez retourner un errorlevel 0 à partir d'un script de lot enfant sans quitter le parent.

59
répondu akf 2016-08-23 15:48:20

Semble faire l'affaire:

ver > nul

tout ne fonctionne pas, et on ne sait pas pourquoi. Par exemple, ce qui suit ne s'applique pas:

echo. > nul
cls > nul
44
répondu Jason Kresowaty 2009-07-11 13:36:50

dans un événement pré-ou post-construction, si le code de retour d'un exécutable est supérieur à zéro, et que l'appel à l'exécutable n'est pas la dernière ligne de l'événement pré - ou post-construction, un moyen rapide de le désactiver et d'éviter de déclencher un contrôle pour un non-zéro errorlevel est de suivre la ligne d'échec avec une ligne qui retourne explicitement zéro:

cmd /c "exit /b 0"

il s'agit essentiellement d'une combinaison générique des solutions mentionnées précédemment qui fonctionnera avec plus de juste la dernière ligne de pré - ou de post-construction de l'événement.

24
répondu Jeffrey 2010-01-09 23:21:36

j'ai trouvé que" exit 0 " ressemble à un bon moyen de traiter ce problème.

Exemple D'Usage:

NET STOP Underdevice /Y

exit 0

si le service sous-desservi n'est pas démarré.

15
répondu user95319 2012-05-01 20:20:51

j'utilise VERIFY ou VERIFY > nul

6
répondu ixe013 2012-05-02 01:37:57

j'utilise personnellement ceci:

cd .

fonctionne même avec Unix shell.

Mais, celui-ci pourrait être un peu plus rapide:

type nul>nul

parce que Process Monitor montre QueryDirectory appelle cd .

PS: cd . a un autre effet secondaire dans la coque unix. Il ne restaure répertoire de travail recréé dans le terminal s'il a été ouvert avant de l'effacer.

6
répondu Andry 2018-06-02 10:21:25

S'il s'agit d'un extrait comme" Post-build Event " etc.

(...) || ver > nul

à la fin de la dernière commande.

alternativement

cmd /c "exit /b 0"

est très propre et non idiomatique -- un lecteur qui sait que Windows shell saura ce qui se passe, et quelle était votre intention.

cependant, si vous êtes dans un script batch, vous pouvez utiliser des sous-machines, qui sont un léger équivalent du script "child batch" de la réponse d'akf.

ont un sous-programme:

:reset_error
exit /b 0

et puis juste

call :reset_error

où que vous en ayez besoin.

voici un exemple complet:

@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

qui produit:

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

comme vous le voyez - simplement appeler et revenir via goto:eof n'est pas suffisant.

1
répondu Tomasz Gandor 2016-10-11 22:01:38

ajouter >nul après chaque commande qui est susceptible de tomber en panne - cela semble empêcher la construction de tomber en panne.

vous pouvez toujours vérifier le résultat de la commande en examinant %errorlevel% .

par exemple:

findstr "foo" c:\temp.txt>nul & if %errorlevel% EQU 0 (echo found it) else (echo didn't find it)
0
répondu Chiefy 2012-01-26 12:22:40

j'utilise ceci:

ping localhost-n 1 > null

-1
répondu Piotr Domanski 2015-02-17 00:13:08

je l'ai toujours utilisé;

set ERRORLEVEL=0

Je l'utilise depuis des années.

-4
répondu cirrus 2014-12-04 16:08:08