Lot de Script SET /p sans valeur
La création d'un script de commandes dans Windows XP. Voici un extrait de code que je vais avoir des problèmes avec:
::==============================================================::
::How many scripts are included in this program?
SET NumOfScripts=4
::==============================================================::
:mainmenu
CLS
ECHO [MAIN MENU]
ECHO Please choose from the following options to run a particular script:
set /p choice="[1] SCRIPT1.bat | [2] SCRIPT2.bat | [3] SCRIPT3.bat | [4] SCRIPT4.bat : "
IF %choice% EQU 1 CALL :SCRIPT1
IF %choice% EQU 2 CALL :SCRIPT2
IF %choice% EQU 3 CALL :SCRIPT3
IF %choice% EQU 4 CALL :SCRIPT4
REM Wrong Choices
IF %choice% GTR %NumOfScripts% (
(ECHO You have entered an invalid option. Please press any key to be taken back to the main menu.) & PAUSE & GOTO:mainmenu
)
IF %choice% LEQ 0 (
(ECHO You have entered an invalid option. Please press any key to be taken back to the main menu.) & PAUSE & GOTO:mainmenu
)
ECHO You have entered an invalid option. Please press any key to be taken back to the main menu
PAUSE & GOTO:mainmenu
Recherche dans le cadre de REM Wrong Choice
, les deux premiers arguments fonctionnent comme ils le devraient, toutefois, si l'utilisateur entre dans aucune valeur (juste appuie sur la touche entrée), il se termine automatiquement le script. J'ai ajouté IF NOT DEFINED choice
et qui ne fonctionne pas... j'ai aussi essayé IF [%choice%]==[]
et IF [%choice%] EQU []
et ceux qui ne fonctionnent pas non plus.
Voici la drôle de chose... vous entrez dans une défaillance de chiffres, disons 5 ou -1, il va donner de l'écho et revenir au menu principal, comme il se doit... ALORS si vous appuyez simplement sur enter sans valeur ajoutée, elle se fera l'écho et revenir au menu principal comme il se doit.
Ma question est comment obtenez-vous de reconnaître que l'utilisateur n'a pas entrez une valeur pour définir /p sur la première de go?
- Les deux réponses sont correctes, toutefois mizo la solution la plus sûre est de. C'est marrant que... tel un simple correctif, mais j'ai complètement oublié de lui =P
Vous devez vous connecter pour publier un commentaire.
Vous pouvez initialiser
choice
à certains invalides de la valeur avant deset /p
, par exemple:Pour imprimer le message d'erreur approprié, vous pouvez le faire
Set /p ne change pas le contenu d'une variable, si l'utilisateur ne rentre pas dans le texte.
Ainsi, vous pouvez simplement définir votre variable à rien pour détecter si l'utilisateur d'entrer quoi que ce soit.
Set "choix="
Ou vous pouvez utiliser la variable errorlevel, comme elle est définie à 1 si l'entrée est vide
Mais être prudent, car il n'est pas réinitialisé à 0. Donc, vous avez à force de vous-même avant de.
Et vous devez utiliser les variables avec l'expansion retardée, comme il est toujours plus sûr.
Un utilisateur peut briser votre script avec une entrée comme "&quitter"
If %errorlevel%==1 (verify>nul & goto empty)
peuvent faire l'affaire. (Là vous l'avez! La lecture de vos réponses peuvent être vraiment éducative!)