Si la déclaration dans le fichier de commandes Windows
J'ai été coincé sur cette stupide si l'instruction, quoi que je fasse, je n'arrive pas à si de tresorerie pour aller à l'étiquette correcte.
- Frapper " y " travaille, cmd-invite s'arrête au DÉBUT de DÉPLOYER
- MAIS, si je tape 'n' cmd imprime COMMENCER à DÉPLOYER puis s'en va à la fin, au lieu d'aller directement à l'annulation de l'étiquette.
Pouvez-vous aider?
:getConfirmation
set /p confirmDeploy =Confirm deployment of code [y/n] ?:
if "%confirmDeploy%"=="y". goto deployCode
if "%confirmDeploy%"=="n". goto cancelDeploy
:deployCode
ECHO START DEPLOY
goto end
:cancelDeploy
ECHO DEPLOY CANCELLED
goto end
Note de côté - c'est la
Elle est définie, merci pour votre démarche. J'ai eu à utiliser : qu'auprès du nom de l'étiquette dans l'instruction if pour que cela fonctionne.
end
étiquette définie? Ou avez-vous l'intention goto :eof
(l'équivalent de sortie /b)Elle est définie, merci pour votre démarche. J'ai eu à utiliser : qu'auprès du nom de l'étiquette dans l'instruction if pour que cela fonctionne.
OriginalL'auteur c14kaa | 2012-03-27
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
if "%confirmDeploy%"=="y"
, sinon elle échoue avec un vide d'entrée ou de caractères spéciaux comme&|<space><TAB>
Notez aussi, que j'ai dû enlever l'espace après le "set /p confirmDeploy" comme @Bali a fait dans son exemple. Si j'ai quitté l'espace là-bas, il ne serait pas mis à la saisie de l'utilisateur dans ma variable.
OriginalL'auteur Bali C
Si l'on ignore le fait que la saisie a été volée. ou n. (en raison de la . dans le cas de la comparaison), personne n'a remarqué le problème avec c14kaa du script (à l'exception de Nick DeVore, mais n'a pas dit pourquoi). Le scénario original a la ligne
set /p confirmDeploy =Confirmer le déploiement de code [o/n] ?:
Nick a mentionné que les ce n'ont pas mis la réponse dans la variable. C'est parce qu'elle a été de mettre la réponse dans "confirmDeploy" (l'espace est une partie du nom de la variable, juste une autre marotte de cmd entrée de l'analyse syntaxique). Ainsi, lorsque c14kaa utilisé %confirmDeploy%, il aurait élargi à d' %confirmDeploy% (c'est à dire été pris à la lettre), à moins que la variable a été définie ailleurs. Je ne peux que supposer que c14kaa avait éteint en écho, car le fait que confirmDeploy n'a pas de substitution (ou quelque chose d'autres que de y ou n) aurait été un gros indice. Il aurait également révélé le problème avec la . dans l'instruction if.
Comme pour les autres suggestions, d'avoir des "" autour de la variable (et, partant, nécessaire dans la chaîne correspondante) est préféré arrêter les erreurs de syntaxe lorsque la variable est vide (la génération de la déclaration de 'si == y', ce que jeb entend par "défaut"), l' : avant le nom de l'étiquette dans le goto est ignoré et il doit y avoir un espace après le /I de Jean de la version (même si la si la commande n'a qu'une option, certaines commandes ont de nombreux et ils peuvent être mis ensemble comme dans "findstr /ivn ..." afin que l'espace marque la fin de la liste).
Le seul autre commentaire que je voudrais faire est que c14kaa suppose que l'utilisateur aura toujours entrez la réponse correcte (y ou n) parce que sinon, le script va "tomber à travers" dans l' :deployCode section (probablement pas le bon comportement par défaut). C'est ce qui explique la réponse obtenue à la suggestion faite par Matt (echo mauvaise entrée). Puisque la réponse a été mis en confirmDeploy<espace> cela signifiait que les deux tests (à l'aide de confirmDeploy sans l'espace) a échoué.
Compte tenu de tous les ci-dessus, nous laisse avec Reny version (avec quelques explications ajouté).
OriginalL'auteur Codemaster Bob
Vous êtes sur la bonne voie, juste besoin de nettoyer la syntaxe et de l'espacement des erreurs. Cela va fonctionner:
OriginalL'auteur Reny
Le problème est qu'aucun de vos tests de travail. Vous êtes à la vérification de l'utilisateur à entrer dans quelque chose comme
y.
oun.
(mais je ne pense pas que vous pouvez réellement entrer dans quelque chose qui va correspondre).Essayer avec:
Je suis sous XP, je sais que cela pourrait faire une différence
Avez-vous remarqué le
if
lignes que j'ai posté sont pas ceux que vous avez?Cela devrait fonctionner, mais il pourrait être plus convivial si vous ajoutez le
/I
option pour des instructions if. Aussi, pourquoi ne pas simplement glisser le point des deux côtés?Merci pour votre aide Mat, Bali C de l'exemple a fonctionné pour moi, en supprimant les guillemets et d'ajouter : avant que l'étiquette des noms!
OriginalL'auteur Mat
essayer cela aussi:
L'argument /I rend insensibles à la casse.
OriginalL'auteur John A