web-dev-qa-db-fra.com

Niblage si dans le fichier BAT Windows

J'ai des difficultés à comprendre comment le script Windows .bat est imbriqué dans Windows. Ce que je souhaite réaliser est le suivant. Je vais passer deux paramètres à un fichier bat

Si le premier paramètre = 0 et si le deuxième paramètre = 0 exécuter proc1

Si le premier paramètre = 0 et seconde non 0 exécute proc2

Si le premier paramètre n'est pas 0 Run Pro 3

Le squelette du code que j'ai écrit jusqu'à présent est

@echo off

IF %1% == 0 (
    IF %2% == 0 ( goto proc1
    ) ELSE ( goto proc2
)
  ELSE ( goto proc3
)

:proc1
echo in Proc1 0 0
pause
exit
:proc2
echo in Proc2 0 N0
pause
exit
:proc3
echo in Proc3 N0  0
pause
exit

La question est que cela fonctionne bien pour les deux premières conditions, mais lorsque le premier paramètre n'est pas nul est toujours chuté à PROC1, alors que prévu est PROC3. Qu'est-ce que j'oublie ici? Le script ne donne aucune erreur sauf si les paramètres sont omis en premier lieu.

6
ramki

Qu'est-ce que j'oublie ici?

Le == L'opérateur de comparaison entraîne toujours une chaîne Comparaison.

Vous devez utiliser EQU plutôt pour effectuer une comparaison numérique numérique .

Utilisez le fichier de commandes suivant:

@echo off

IF NOT %1% EQU 0 (
    goto proc3
)
IF %2% EQU 0 ( 
    goto proc1
) 

goto proc2 

:proc1
echo in Proc1 0 0
pause
goto :exit
:proc2
echo in Proc2 0 N0
pause
goto :exit
:proc3
echo in Proc3 N0  0
pause
:exit

Remarques:

  • Certains goto :exitss ont été ajoutés pour mettre fin aux PROC au lieu de exit qui met fin à la coquille cmd shell.

Exemple de sortie:

F:\test>example 0 0
in Proc1 0 0
Press any key to continue . . .

F:\test>example 0 1
in Proc2 0 N0
Press any key to continue . . .

F:\test>example 1 0
in Proc3 N0  0
Press any key to continue . . .
F:\test>

En plus de lecture

0
DavidPostill