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]
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.
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)
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
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.