exit /B 0 ne fonctionne pas
J'ai le problème suivant:
J'ai créé un script batch qui s'appelle elle-même (pour être capable d'écrire un journal en parallèle). Dans le script que j'ai commencer un autre processus (comme start startServer.bat
) qui démarre un processus java et maintient ouvert tout le temps.
Dans mon premier script que j'ai attendez 30 secondes, vérifier si le processus est en cours d'exécution et de faire une:
exit /B 0
Malheureusement cela ne fonctionne pas, la fenêtre montre que la sortie /B 0 est en cours d'évaluation, mais la fenêtre reste toujours ouverte. Lorsque je ferme la fenêtre avec les autres processus (ce qui signifie "enfant" processus a commencé dans mon .chauve-souris) mon script continue son exécution.
Donc:
scriptA.chauve-souris
-> in there I call: start startServer.bat
-> wait 30 seconds
-> check is server is started
-> exit /B 0
Process hangs up!
Ce qui est très bizarre, si j'écrase un autre script, comme:
scriptB.chauve-souris
-> call scriptA.bat
-----> in there I call: start startServer.bat
-----> wait 30 seconds
-----> check if server is started
-----> exit /B 0
-> scriptA.bat continues without any hangup!
J'ai aussi essayé la même chose avec sortie 0 (sans /B) aussi, même résultat! Dans le premier cas, il raccroche, dans le deuxième cas, ma fenêtre se ferme comme prévu...
A quelqu'un d'entre-vous jamais eu un problème avant et sait quel est le problème ici?
Processus raccroche!
OriginalL'auteur murxx | 2010-05-21
Vous devez vous connecter pour publier un commentaire.
Il y a une bonne explication de toutes les options pour la sortie d'un script de commandes ici:
http://www.robvanderwoude.com/exit.php
Plus précisément, à partir de cette page:
Si vous ne voulez certainement pas
exit /b 0
dans ce cas. Si seulementexit 0
ne fonctionne pas, essayezGOTO:EOF
.J'ai essayé avec goto :EOF, mais pas de différence: D:>goto :EOF Alors que le processus se bloque jusqu'à ce que je ferme les autres processus de windows! ;(
OriginalL'auteur Vicky
Je suppose que ton problème se trouve dans la
start
de commande. L'extrait suivant de ladémarrer /?
aide peut-être la question:Comme une solution, vous pouvez essayer de modifier le début de la commande comme ceci:
Merci pour les commentaires. En général, vous devriez poster autant d'informations que possible. Sinon, il est assez difficile de "deviner" où le problème est peut-être à trouver. Le mieux est, vous toujours montrer le code qui crée des Problèmes. Aussi, vous devriez commencer à la habbit de l'acceptation utile des réponses à vos questions.
OriginalL'auteur Frank Bollack
La auparavant répondre de Vicky est très bon. Il y a plus de sans-papiers (ou, au moins, pas clair) comportement ici.
Dans votre question, vous avez un peu plus compliqué la situation, mais disons que vous êtes des appels à partir d'un fichier de commandes à partir de l'original, à l'aide de
exit /b 0
dans le appelé fichier de commandes, et d'attendre que le ERRORLEVEL est accessible dans l'original.D'origine
Enfant du fichier de commandes
Pour obtenir que cela fonctionne, le
start
commande doit être utilisée avec certaines options. Selon les options, ils doivent être dans un ordre spécifique. (!)Selon les docs à SS64 sur Démarrer, vous devriez être en mesure d'utiliser le
/b
et/wait
commutateurs. La documentation n'indique pas que l'ordre de ces commutateurs de questions, mais il n'.Par exemple, ce sera PAS travail (d'exécution des commandes de l'ordre, et ERRORLEVEL n'est pas retourné):
Mais ce ne fonctionnent exactement comme prévu:
La seule différence est l'échange le
/b
et/wait
commutateurs.J'ai découvert cela par hasard, à l'aide de la procédure suivante:
start
etcall
etcmd
Je n'ai pas essayer quelque chose de nouveau, je viens de commencer le cours, et cela a fonctionné la première fois. En comparant les versions précédentes des fichiers m'a montré cette (apparemment) petite différence. S'avère, il n'y a pas une telle chose comme un "petit" changement!
OriginalL'auteur JonathanDavidArndt