1 votes

Niveau d'erreur erroné à l'intérieur des parenthèses dans le script Windows batch

Voici un fichier .bat de Windows :

@echo off

call :label
echo %errorlevel%
pause >nul
exit

:label
exit /b 1

Fonctionne comme prévu et donne des résultats 1 .

mais en changeant le code en :

@echo off

if 1==1 (
    call :label
    echo %errorlevel%
    )
pause >nul
exit

:label
exit /b 1

le résultat est 0 au lieu de 1 .

En if 1==1 est juste pour montrer le résultat mais je dois utiliser une autre instruction if dans le script réel. Pourquoi cela se produit-il et quelle est la solution ? Si l'expansion retardée est la solution, comment l'utiliser ?

2voto

DavidPostill Points 140654

Si l'expansion retardée est la solution, comment l'utiliser ?

Comme suit :

@echo off
setlocal enabledelayedexpansion
if 1==1 (
    call :label
    echo !errorlevel!
    )
pause >nul
endlocal
exit
:label
exit /b 1

L'expansion retardée fera en sorte que les variables d'un fichier batch soient seront développées au moment de l'exécution plutôt qu'au moment de l'analyse. activée avec l'option SETLOCAL EnableDelayedExpansion commandement.

Source : - EnableDelayedExpansion - Windows CMD - SS64.com

Vous devez remplacer % con ! pour profiter d'une expansion retardée.


Autres lectures

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X