J'ai un fichier batch qui automatise la copie d'un tas de fichiers d'un endroit à l'autre et inversement pour moi. La seule chose qui m'aide, c'est que je continue à sélectionner accidentellement cette commande hors de ma mémoire tampon de commandes et à écraser en masse les modifications non validées.
De quel code aurais-je besoin pour mon fichier .bat pour qu'il dise «êtes-vous sûr» et me fasse taper «y» avant d'exécuter le reste du fichier? Si autre chose que "y" est tapé, il devrait quitter l'exécution sur cette ligne.
Edit 27 novembre Ok, j'ai à nouveau marqué ceci comme sans réponse parce que je n'arrive toujours pas à le comprendre. Quand j'appelle «exit»; il ferme cmd.exe qui n'est pas ce que je veux. Tout cela parce que Windows a mal implémenté le tampon de commande [différemment de ce à quoi je suis habitué au moins]
la source
SET AREYOUSURE=N
avant l'invite afin d'effacer le choix si vous avez déjà exécuté le script auparavant dans cette fenêtre de commande. Sans lui, la valeur par défaut restera le choix précédemment sélectionné.setlocal
et leendlocal
devraient s'en occuper.%AREYOUSURE%
n'existera plus après leendlocal
.essayez la commande CHOICE , par exemple
la source
La
choice
commande n'est pas disponible partout. Avec les nouvelles versions de Windows, laset
commande a la/p
possibilité d'obtenir une entrée utilisateurvoir
set /?
pour plus d'informationsla source
Deux commandes sont disponibles pour les invites utilisateur sur la ligne de commande Windows:
/P
disponible sur toutes les versions de Windows NT avec les extensions de commande activées etset est une commande interne du processeur de commandes Windows
cmd.exe
. L'option/P
d'inviter un utilisateur à saisir une chaîne n'est disponible qu'avec les extensions de commande activées qui sont activées par défaut, sinon presque aucun fichier de commandes ne fonctionnerait plus de nos jours.choice.exe est une application console distincte (commande externe) située dans
%SystemRoot%\System32
.choice.exe
de Windows Server 2003 peut être copié dans le répertoire%SystemRoot%\System32
sur une machine Windows XP pour une utilisation sur Windows XP comme de nombreuses autres commandes non disponibles par défaut sur Windows XP, mais disponibles par défaut sur Windows Server 2003.Il est recommandé de privilégier l'utilisation de CHOICE à l'utilisation de SET / P pour les raisons suivantes:
/C
(et Ctrl+C) et émet un bip d'erreur si l'utilisateur appuie sur une mauvaise touche.echo Y | call PromptExample.bat
utilisation de CHOICE .cmd
raison d'une erreur de syntaxe, ou dans l'exécution de commandes non incluses du tout dans le fichier batch sur non bon fichier batch codé. Il faut quelques efforts pour sécuriser SET / P contre une entrée utilisateur erronée ou intentionnelle.Voici un exemple d'invite utilisant le CHOIX préféré et alternativement SET / P sur
choice.exe
non disponible sur l'ordinateur utilisé exécutant Windows.Remarque: ce fichier de commandes utilise des extensions de commande qui ne sont pas disponibles sur Windows 95/98 / ME en utilisant
command.com
plutôtcmd.exe
que comme interpréteur de commandes.La ligne de commande
set "UserChoice=!UserChoice: =!"
est ajoutée pour permettre d'appeler ce fichier de commandesecho Y | call PromptExample.bat
sous Windows NT4 / 2000 / XP et ne nécessite pas l'utilisation deecho Y| call PromptExample.bat
. Il supprime tous les espaces de la chaîne lue à partir de STDIN avant d'exécuter les deux comparaisons de chaînes.echo Y | call PromptExample.bat
entraîne l' affectation de YSPACE à la variable d'environnementUserChoice
. Cela entraînerait le traitement de l'invite deux fois car il"Y "
n'est ni insensible à la casse"N"
ni égal ni"Y"
sans supprimer d'abord tous les espaces. Ainsi,UserChoice
avec YSPACE comme valeur, cela entraînerait l'exécution de l'invite une deuxième fois avec l'optionN
définie par défaut dans le fichier de commandes lors de la deuxième exécution de l'invite, ce qui entraînerait ensuite une sortie inattendue du traitement du fichier de commandes. Oui, l'utilisation sécurisée de SET / P est vraiment délicate, n'est-ce pas?Pour encore plus de détails sur l'utilisation de SET / P et CHOICE pour inviter l'utilisateur à choisir parmi une liste d'options, voir la réponse sur Comment empêcher l'interpréteur de commandes Windows de quitter l'exécution du fichier de commandes sur une entrée utilisateur incorrecte?
Quelques indices supplémentaires:
UserChoice
avecN
etY
, mais la valeur deUserChoice
entouré de"
avec"N"
et"Y"
.EQU
etNEQ
sont conçus pour comparer deux entiers compris entre -2147483648 et 2147483647 et non pour comparer deux chaînes.EQU
etNEQ
fonctionne également pour les comparaisons de chaînes, mais résulte en la comparaison de chaînes entre guillemets doubles sur une tentative inutile de convertir la chaîne de gauche en entier.EQU
etNEQ
ne peut être utilisé qu'avec les extensions de commande activées. Les opérateurs de comparaison pour les comparaisons de chaînes sont==
etnot ... ==
qui fonctionnent même avec des extensions de commande désactivées, car mêmecommand.com
MS-DOS et Windows 95/98 / ME les ont déjà pris en charge. Pour plus de détails sur les opérateurs de comparaison IF , voir Symbole équivalent à NEQ, LSS, GTR, etc. dans les fichiers batch Windows .goto :EOF
nécessite des extensions de commande activées pour vraiment quitter le traitement des fichiers de commandes. Pour plus de détails, voir Où retourne GOTO: EOF?Pour comprendre les commandes utilisées et leur fonctionnement, ouvrez une fenêtre d'invite de commande, exécutez les commandes suivantes et lisez attentivement toutes les pages d'aide affichées pour chaque commande.
choice /?
echo /?
endlocal /?
goto /?
if /?
set /?
setlocal /?
Voir également:
Il explique la raison de l'utilisation de la syntaxe
set "variable=value"
lors de l'affectation d'une chaîne à une variable d'environnement.if errorlevel X
comportement et l'opérateur&
.|
et le traitement STDIN .SystemRoot
.la source
CHOICE.COM
par défaut sur MS-DOS 6.0, MS-DOS 7.0, Windows 95 et Windows 98. Mais il n'y avait aucunechoice.exe
installation par défaut sur Windows NT4, Windows 2000 et Windows XP.CHOICE.COM
pourrait également être utilisé sur NT4, Windows 2000 et Windows XP, mais il serait préférable d'utiliser 32 bits àchoice.exe
partir du kit de ressources approprié. Voir la page de Rob van der Woude sur le CHOIX . Les options sont en partie différentes entreCHOICE.COM
etchoice.exe
. Cependant, la question ne concerne pas DOS.Ici un peu plus simple:
ou
la source
%errorlevel%
est toujours une valeur entière. Voir ici pour la documentation comprenant un exemple.Voici ma méthode de référence pour une réponse oui / non .
Il est également insensible à la casse.
Cela vérifie simplement les erreurs données par l'entrée et définit la
choice
variable sur ce dont vous avez besoin afin qu'elle puisse être utilisée ci-dessous dans le code.la source
Si vous voulez que le programme batch revienne à l'invite et ne ferme pas l'invite (AKA cmd.exe), vous pouvez utiliser "exit / b".
Cela peut aider.
Ou si vous ne voulez pas utiliser autant de lignes ...
J'espère que cela t'aides...
la source
Voici un exemple simple que j'utilise dans un script de sauvegarde (.bat / batch) sous Windows 10, qui me permet d'avoir différentes options lors de la réalisation de sauvegardes.
Vous pouvez en avoir autant que vous en avez besoin.
la source
Tout d'abord, ouvrez le terminal.
Ensuite, tapez
Ensuite, ouvrez .sûr et collez-le à l'intérieur.
Après cela, fermez le fichier.
Cela vous donnera une invite de êtes-vous sûr avant de continuer la commande.
la source
Terminal ouvert. Tapez ce qui suit
Collez ceci à l'intérieur de sure.sh
Fermez sure.sh et saisissez-le dans le terminal.
Maintenant, si vous tapez sûr avant de taper la commande, il vous donnera une invite de confirmation avant de continuer la commande.
J'espère que cela vous sera utile!
la source