J'ai une question sur la structure if - else dans un fichier batch. Chaque commande s'exécute individuellement, mais je ne peux pas utiliser les blocs "if - else" en toute sécurité, donc ces parties de mon programme ne fonctionnent pas. Comment puis-je faire fonctionner ces pièces? Je vous remercie.
IF %F%==1 IF %C%==1 (
::copying the file c to d
copy "%sourceFile%" "%destinationFile%"
)
ELSE IF %F%==1 IF %C%==0 (
::moving the file c to d
move "%sourceFile%" "%destinationFile%"
)
ELSE IF %F%==0 IF %C%==1 (
::copying a directory c from d, /s: boş olanlar hariç, /e:boş olanlar dahil
xcopy "%sourceCopyDirectory%" "%destinationCopyDirectory%" /s/e
)
ELSE IF %F%==0 IF %C%==0 (
::moving a directory
xcopy /E "%sourceMoveDirectory%" "%destinationMoveDirectory%"
rd /s /q "%sourceMoveDirectory%"
)
batch-file
if-statement
éponyme
la source
la source
{}
bouton; cela aide à rendre les messages plus lisibles et évite certains problèmes avec le balisage. En réponse à votre question, c'est le cas maintenant! Lorsque vous rédigez une question, vous trouverez un aperçu ci-dessous afin que vous puissiez voir à quoi elle ressemblera une fois publiée.Réponses:
Votre syntaxe est incorrecte. Vous ne pouvez pas utiliser
ELSE IF
. Il semble que vous n'en ayez pas vraiment besoin de toute façon. Utilisez simplement plusieursIF
instructions:Grande référence de fichier de commandes: http://ss64.com/nt/if.html
la source
&&
dans plusieursif
conditions, voir ma syntaxe alternative?IF condition1 IF condition 2
ELSE IF
? Cela fonctionne bien sous Win7. Voir exemple: paste2.org/G8tMae92Je pense que dans la question et dans certaines des réponses, il y a un peu de confusion sur la signification de ce pseudo-code sous DOS: IF A IF BX ELSE Y. Cela ne signifie pas IF (A et B) THEN X ELSE Y, mais dans fait signifie IF A (IF B THEN X ELSE Y). Si le test de A échoue, alors l'ensemble du if-else interne sera ignoré.
Comme l'une des réponses mentionnées, dans ce cas, un seul des tests peut réussir, donc le 'else' n'est pas nécessaire, mais bien sûr cela ne fonctionne que dans cet exemple, ce n'est pas une solution générale pour faire if-else.
Il existe de nombreuses façons de contourner ce problème. Voici quelques idées, toutes sont assez moche mais bon, c'est (ou du moins était) DOS!
la source
set
n'ont pas besoin de signes de pourcentage; devrait êtreset one=1
AFAIK vous ne pouvez pas faire un
if else
lot comme vous pouvez le faire dans d'autres langues, il doit être imbriquéif
.En utilisant des imbriqués
if
, votre lot ressemblerait àou comme James l'a suggéré, enchaînez les vôtres
if
, mais je pense que la syntaxe appropriée estla source
if else
, en particulier dans les langages de type C est juste un imbriquéif
aussi. Vous n'avez pas non plus à les imbriquer avec des blocs dans des fichiers de commandes.else if
combo est juste un imbriqué,if
mais je ne pensais pas que vous pourriez utiliser ces mots-clés ensemble par lots comme vous pouvez le faire dans les langages C.Je pense que vous pouvez utiliser quelque chose comme
la source
do foo
etdo bar
.IF (test) (command) ELSE IF (test) (command)
, vous impliquezIF (test) (command) ELSE (IF (test) (command))
. Cela peut fonctionner parfois, mais si vous pensez que c'est une structure de programmation réelle acceptable sous DOS, alors ce sera un PITA à dépanner en cas d'échec.Un peu tard et peut-être encore bon pour des conditions if complexes, car je voudrais ajouter un paramètre "done" pour conserver une structure if-then-else:
la source
IF...ELSE IF
Les constructions fonctionnent très bien dans les fichiers batch, en particulier lorsque vous n'utilisez qu'une seule expression conditionnelle sur chaque ligne IF:Dans votre exemple, vous utilisez la
IF...AND...IF
construction de type, où 2 conditions doivent être remplies simultanément. Dans ce cas, vous pouvez toujours utiliser laIF...ELSE IF
construction, mais avec des parenthèses supplémentaires pour éviter l'incertitude pour la prochaine condition ELSE:La construction ci-dessus est équivalente à:
La séquence de traitement des commandes par lots dépend de l'ordre d'analyse de CMD.exe . Assurez-vous simplement que votre construction suit cet ordre logique et, en règle générale, cela fonctionnera. Si votre script batch est traité par Cmd.exe sans erreur, cela signifie qu'il s'agit de la construction correcte (c'est-à-dire prise en charge par votre version OS Cmd.exe), même si quelqu'un a dit le contraire.
la source
Voici mon exemple de code pour if..else..if
qui fait ce qui suit
Demander à l'utilisateur le nom du processus
Si le nom du processus n'est pas valide
, il est écrit à l'utilisateur
si le nom du processus est services
alors il est écrit à l'utilisateur
si le nom du processus est valide et non des services
alors il est écrit à l'utilisateur
le processus a été tué via
taskill
alors je l'ai appelé Process killer.bat
Voici mon code:
la source
voici comment j'ai géré si sinon si situation
Notez que ce n'est pas le même que le bloc if-elseif que les autres langages de programmation comme C ++ ou Java mais il fera ce que vous devez faire
la source