Le fichier Bat et étiquettes
Je suis en train d'écrire un fichier bat pour un réseau politique qui va installer un programme s'il n'existe pas ainsi que plusieurs autres fonctions. Je suis en utilisant les instructions GOTO en fonction de certains critères sont respectés. Cependant, il semble que les étiquettes ne sont pas de tir correctement comme tous les faire.
J'ai simplifié mon script afin de saisir une idée de ce qui pourrait se passer.
@echo off
IF EXIST c:\test\test.txt (GOTO :EXISTING) ELSE GOTO :MISSING
:EXISTING
echo file exists
:MISSING
echo file missing
ping localhost -n 5 >NUL
Fondamentalement, il vérifie que le fichier "test.txt" il existe dans le dossier "c:\test" id qui ne. Il devrait donc echo fichier existe à la console. Toutefois, les deux "le fichier existe" et "fichier manquant" sont fait l'écho de la console. Je trouve que si j'ai supprimer le fichier à partir du dossier ou il suffit de le renommer, il ne échos "fichier manquant"
Pourquoi est-il en cours en cours les deux étiquettes?
- Vous avez écrit ici un
switch
sansbreak
s'. - vous êtes le traitement de
GOTO
comme si c'était unfunction()
appel, qu'il ne l'est pas.
Vous devez vous connecter pour publier un commentaire.
Parce qu'un GOTO est juste un saut dans l'exécution d'un point dans le script, puis l'exécution se poursuit de manière séquentielle à partir de ce point. Si vous voulez que ça cesse après l'exécution de "EXISTANT", alors vous devez faire quelque chose comme cela. Remarque le supplément de GOTO et de la nouvelle étiquette:
Il est intéressant de noter qu'avec de la cmd.exe (c'est à dire, le NT de commande à base de coquilles [NT, Win2k, XP, etc]), vous pouvez le faire SI...SINON les blocs comme ceci:
...de sorte que vous pouvez éliminer votre GOTOs entièrement.
localhost
peut gérer 5 pintesC'est parce que vous avez besoin de sauter sur les "disparus" peu si elle existe:
Vous pouvez aussi garder à l'esprit que l'
cmd.exe
langage de commandes est un peu juste plus puissant que celui qui est fourni avec MS-DOS. Je préfère celui-ci:Après l'echo fichier existe, la commande suivante est
Vous avez besoin de faire quelque chose pour ignorer le manque de cas. Peut-être un autre saut pour un :PING étiquette?
Lorsque vous déboguez il aide à garder l'écho.
Parce que
GOTO
déclaration déplace l'exécution de cette étiquette. Pour l'utiliser dans la situation comme la vôtre, vous devez ajouter un autreGOTO
étiquette.