web-dev-qa-db-fra.com

Fichiers de commandes Windows: plusieurs si conditions

Y at-il un moyen de dire quelque chose comme

 si% 1 == 1 ou% 1 == 2 

dans un fichier batch? Ou encore mieux, si je pouvais spécifier un ensemble de valeurs candidates comme

 si% 1 dans [1, 2, 3, 4, ... 20] 
23

Une façon d'implémenter logical-or consiste à utiliser plusieurs conditions qui goto la même étiquette.

if %1 == 1 goto :cond
if %1 == 2 goto :cond
goto :skip
:cond
someCommand
:skip

Pour tester l'appartenance à un ensemble, vous pouvez utiliser une boucle for:

for %%i in (1 2 3 4 ... 20) do if %1 == %%i someCommand

Notez que == est l'opérateur d'égalité de chaîne. equ est l'opérateur d'égalité numérique.

23
bk1e

Le "et" s'avère être facile - mais pas la syntaxe que vous attendez: Ces 3 exemples l'illustrent.

En mots: Si 1 == 1 AND 2 == 2 Alors echo "hello"

if 1==1 echo hello
hello

if 1==1 if 2==2 echo hello
hello

if 1==1 if 2==1 echo hello
(nothing was echoed)
24
Dana Forsberg

Je sais que c'est vieux, mais je voulais juste vous faire savoir que c'est effectivement possible, contrairement aux précédents posts. Fondamentalement, vous liez deux commandes IF en une.

Syntaxe: IF equation (cmd if true)else command if false

Essayez ceci pour deux variables (pour exécuter l'instruction IF xx AND xx)

set varone=1
set vartwo=2

if %varone% equ 1 (if %vartwo% equ 2 (echo TRUE)else echo FALSE)else echo FALSE

avec une variable (pour effectuer OR instruction- note vous pouvez également utiliser plusieurs variables)

if %a% equ 1 (echo pass)else if %a equ 2 (echo pass)else echo false

Vous pouvez substituer Echo pass/fail avec votre commande

9
bill

Un peu tard dans le match, mais supposons néanmoins que cela pourrait aider quelqu'un à trébucher sur la question. Pour ce faire, j'utilise une combinaison d'écho canalisée vers findstr, comme suit:

(echo ":1: :2:" | findstr /i ":%1:" 1>nul 2>nul) && (
    echo Input is either 1 or 2
)

Comme findstr est une commande externe, il est recommandé de ne pas utiliser cette commande dans une boucle pouvant parcourir des milliers d'itérations. Si ce n'est pas le cas, cela devrait résoudre le problème que vous tentez de faire au lieu d'utiliser plusieurs ifs. De plus, il n'y a rien de spécial dans le choix de ":", utilisez simplement un délimiteur qui ne fera probablement pas partie de la valeur du% 1.

Grâce au reste des gens qui ont indiqué un autre lien qui semble avoir une question similaire, je posterai cette réponse là aussi, juste au cas où quelqu'un tomberait sur cette question et n'arriverait pas ici.

0
Arun