Comment est la commande START avec une option WAIT
START /wait notepad.exe
START /wait notepad.exe
... différent de l'utilisation d'une commande CALL?
CALL notepad.exe
CALL notepad.exe
Y a-t-il une situation où l'un peut se comporter différemment de l'autre en fonction de ce qui est exécuté?
windows
batch-file
Tchad
la source
la source
Réponses:
Pour les fichiers exe , je suppose que les différences sont presque sans importance.
Mais pour démarrer un exe, vous n'avez même pas besoin
CALL
.Lors du démarrage d'un autre lot, c'est une grande différence,
car
CALL
le démarrera dans la même fenêtre et le lot appelé a accès au même contexte de variable.Ainsi, il peut également changer les variables qui affectent l'appelant.
START
créera un nouveau cmd.exe pour le lot appelé et sans / b il ouvrira une nouvelle fenêtre.Comme il s'agit d'un nouveau contexte, les variables ne peuvent pas être partagées.
Différences
Utilisation
start /wait <prog>
- Les modifications des variables d'environnement sont perdues à la
<prog>
fin- L'appelant attend que le
<prog>
soit terminéUtilisation
call <prog>
- Pour exe, il peut être omis, car il équivaut à démarrer
<prog>
- Pour un exe-prog, le lot de l'appelant attend ou démarre l' exe de manière asynchrone, mais le comportement dépend de l' exe lui-même.
- Pour les fichiers batch , le batch appelant continue, lorsque l'appelé se
<batch-file>
termine, SANS appel le contrôle ne retournera pas au batch callerAddenda:
L'utilisation
CALL
peut modifier les paramètres (pour les fichiers batch et exe), mais uniquement lorsqu'ils contiennent des signes carets ou des pourcentages.Sera étendu à (à partir d'un fichier batch)
la source
start /wait /b cmd /c <batchfile.bat>
parce que les fichiers de commandes s'exécutent les uns après les autres dans la même fenêtre de commandecall batchfile.bat
Je pense qu'ils devraient généralement fonctionner de la même manière, mais il y a des différences.
START
est généralement utilisé pour démarrer des applications ou pour démarrer l'application par défaut pour un type de fichier donné. De cette façon si vousSTART http://mywebsite.com
ne le faites pasSTART iexplore.exe http://mywebsite.com
.START myworddoc.docx
démarrerait Microsoft Word et ouvrirait myworddoc.docx.CALL myworddoc.docx
fait la même chose ... maisSTART
fournit plus d'options pour l'état de la fenêtre et les choses de cette nature. Il permet également de définir la priorité et l'affinité du processus.En bref, étant donné les options supplémentaires fournies par start, cela devrait être votre outil de choix.
la source
Il y a une différence utile entre
call
etstart /wait
lors de l'appelregsvr32.exe /s
par exemple, également référencée par Gary dans sa réponse à how-do-i-get-the-application-exit-code-from-a-windows-command-lineretournera toujours 0 mais
renverra le niveau d'erreur de regsvr32.exe
la source
C'est ce que j'ai trouvé en exécutant des fichiers batch en parallèle (plusieurs instances du même fichier bat en même temps avec différents paramètres d'entrée):
Disons que vous avez un fichier exe qui effectue une longue tâche appelée LongRunningTask.exe
Si vous appelez l'exe directement à partir du fichier bat, seul le premier appel à LongRunningTask réussira, tandis que les autres recevront une erreur du système d'exploitation "Le fichier est déjà utilisé par le processus"
Si vous utilisez cette commande:
start / B / WAIT "" "LongRunningTask.exe" "paramètres"
Vous serez en mesure d'exécuter plusieurs instances de la batte et de l'exe, tout en attendant que la tâche se termine avant que la batte continue d'exécuter les commandes restantes. L'option / B permet d'éviter de créer une autre fenêtre, les guillemets vides sont nécessaires pour que la commande fonctionne, voir la référence ci-dessous.
Notez que si vous n'utilisez pas le / WAIT au début, la LongRunningTask sera exécutée en même temps que les commandes restantes dans le fichier de commandes, donc cela pourrait créer des problèmes si l'une de ces commandes nécessite la sortie de la LongRunningTask
Reprise:
Cela ne peut pas fonctionner en parallèle:
Cela fonctionnera en parallèle et sera correct dans la mesure où il n'y a pas de dépendances de données entre la sortie de la commande et le reste du fichier bat:
Cela s'exécutera en parallèle et attendra que la tâche se termine, vous pouvez donc utiliser la sortie:
Référence pour la commande de démarrage: Comment puis-je exécuter un programme à partir d'un fichier batch sans laisser la console ouverte après le démarrage du programme?
la source
Appel
Appelle un programme batch depuis un autre sans arrêter le programme batch parent. La commande call accepte les étiquettes comme cible de l'appel. L'appel n'a aucun effet sur la ligne de commande lorsqu'il est utilisé en dehors d'un script ou d'un fichier de commandes. https://technet.microsoft.com/en-us/library/bb490873.aspx
Début
Démarre une fenêtre d'invite de commandes distincte pour exécuter un programme ou une commande spécifié. Utilisé sans paramètres, démarrer ouvre une deuxième fenêtre d'invite de commande. https://technet.microsoft.com/en-us/library/bb491005.aspx
la source
Ceci est un vieux fil, mais je viens de rencontrer cette situation et j'ai découvert un moyen de contourner cela. J'essayais d'exécuter un setup.exe, mais le focus revenait à la ligne suivante du script sans attendre la fin de setup.exe. J'ai essayé les solutions ci-dessus sans succès.
En fin de compte, passer la commande à travers plus a fait l'affaire.
setup.exe {arguments} | plus
la source