comment utiliser goto dans le script de commandes
J'ai écrit à la suite du code
setlocal
set /A sample =1
:first
type C:\test.txt | find "inserted"
if %ERRORLEVEL% EQU 0 goto test
if %ERRORLEVEL% EQU 1 goto exam
:test
echo "testloop" >> C:\testloop.txt
set /A sample = %sample% + 1
if %sample% LEQ 4 goto first
:exam
echo "exam loop" >> C:\examloop.txt
endlocal
mais il va lable "examen" même si le niveau d'erreur n'est pas égal à "1" plz help me
Vous devez vous connecter pour publier un commentaire.
Votre problème n'est pas de goto, c'est errorlevel nécessite un traitement spécial, ce n'est pas comme un ordinaire variable d'environnement. Le seul test que vous pouvez faire avec errorlevel est de tester si elle est supérieure ou égale à la valeur.
vous devez tester errorlevel valeurs de la plus haute à la plus basse parce que si errorlevel 1
puis
if errorlevel 1
sera vrai, maisif errorlevel 0
sera aussi être vraisi vous avez les extensions de commande est activé, et il n'y a pas de variable d'environnement appelée ERRORLEVEL (insensible à la casse). Ensuite, en théorie, vous pouvez utiliser %ERRORLEVEL% comme un vulgaire variable d'environnement. Donc, cela devrait aussi fonctionner
Vous avez besoin de la liste des niveaux d'erreur dans l'ordre décroissant (errorlevel2, errorlevel1, errorlevel0...).
Voir cette explication et exemple.
Vous pouvez envisager d'utiliser
ERRORLEVEL
directe de branchement comme suit:Peut être utiliser
||
au lieu de errorlevel pour la ramification.Moyen plus simple à utiliser pour la boucle.
For /l %%a in (1,1,4) do (
(Type c:\test.txt | trouver “insérée” >> c:\testloop.txt) || goto :fait
)
:fait
Echo “examen de la boucle” >> c:\examloop.txt
Goto :eof
;)