web-dev-qa-db-fra.com

Commande CALL vs. START avec l'option / WAIT

Comment est la commande START avec une option WAIT

START /wait notepad.exe 
START /wait  notepad.exe 

... est-ce différent d'utiliser une commande CALL?

CALL notepad.exe 
CALL notepad.exe 

Existe-t-il une situation où l’un peut se comporter différemment, l’autre dépendant de ce qui est exécuté?

131
ChadD

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 de CALL.

Lors du démarrage d'un autre lot, la différence est grande.
as CALL le lancera dans la même fenêtre et le lot appelé aura accès au même contexte de variable.
Cela peut donc aussi changer les variables qui affectent l'appelant.

START créera un nouveau cmd.exe pour le lot appelé et, sans/b, une nouvelle fenêtre s'ouvrira.
Comme il s’agit d’un nouveau contexte, les variables ne peuvent pas être partagées.

Différences

tilisation de start /wait <prog>
- Les modifications des variables d'environnement sont perdues à la fin du <prog>
- L'appelant attend que le <prog> soit terminé

tilisation de call <prog>
- Pour exe , il peut être omis, car cela équivaut à démarrer <prog>
- Pour un exe-prog , le lot de l'appelant attend ou démarre l'exe exe asynchrone, mais le comportement dépend de l'exe lui-même.
- Pour les fichiers batch , le traitement de l'appelant continue, une fois l'appel <batch-file> terminé, SANS appel, le contrôle ne sera pas renvoyé. au lot de l'appelant

Addenda:

L'utilisation de CALL peut modifier les paramètres (pour les fichiers batch et exe), mais uniquement s'ils contiennent des carets ou des signes de pourcentage.

call myProg param1 param^^2 "param^3" %%path%%

Sera étendu à (à partir d'un fichier de commandes)

myProg param1 param2 param^^3 <content of path>
157
jeb

Je pense qu'ils devraient généralement fonctionner de la même manière, mais il y a quelques différences. START est généralement utilisé pour démarrer des applications ou pour lancer l'application par défaut pour un type de fichier donné. Ainsi, si vous START http://mywebsite.com cela ne fait pas START iexplore.exe http://mywebsite.com.

START myworddoc.docx démarre Microsoft Word et ouvre myworddoc.docx .CALL myworddoc.docx fait la même chose ... cependant START fournit davantage d'options pour l'état de la fenêtre et des éléments de ce type. Cela permet également de définir la priorité et l'affinité du processus.

En bref, étant donné les options supplémentaires fournies par start, ce devrait être votre outil de choix.

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
  [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
  [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
  [command/program] [parameters]

"title"     Title to display in window title bar.
path        Starting directory.
B           Start application without creating a new window. The
            application has ^C handling ignored. Unless the application
            enables ^C processing, ^Break is the only way to interrupt
            the application.
I           The new environment will be the original environment passed
            to the cmd.exe and not the current environment.
MIN         Start window minimized.
MAX         Start window maximized.
SEPARATE    Start 16-bit Windows program in separate memory space.
SHARED      Start 16-bit Windows program in shared memory space.
LOW         Start application in the IDLE priority class.
NORMAL      Start application in the NORMAL priority class.
HIGH        Start application in the HIGH priority class.
REALTIME    Start application in the REALTIME priority class.
ABOVENORMAL Start application in the ABOVENORMAL priority class.
BELOWNORMAL Start application in the BELOWNORMAL priority class.
NODE        Specifies the preferred Non-Uniform Memory Architecture (NUMA)
            node as a decimal integer.
AFFINITY    Specifies the processor affinity mask as a hexadecimal number.
            The process is restricted to running on these processors.

            The affinity mask is interpreted differently when /AFFINITY and
            /NODE are combined.  Specify the affinity mask as if the NUMA
            node's processor mask is right shifted to begin at bit zero.
            The process is restricted to running on those processors in
            common between the specified affinity mask and the NUMA node.
            If no processors are in common, the process is restricted to
            running on the specified NUMA node.
WAIT        Start application and wait for it to terminate.
15
mckeejm

Il existe une différence utile entre call et start /wait lors de l'appel de regsvr32.exe /s par exemple, également référencé par Gary dans sa réponse à comment -i-get-the-application-exit-code-from-a-windows-line-line

call regsvr32.exe /s broken.dll
echo %errorlevel%

retournera toujours 0 mais

start /wait regsvr32.exe /s broken.dll
echo %errorlevel%

renverra le niveau d'erreur de regsvr32.exe

9
aedjp

Voici ce que j'ai trouvé en exécutant des fichiers de commandes en parallèle (plusieurs instances du même fichier bat en même temps avec des paramètres d'entrée différents):

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 à la tâche LongRunning aboutira, tandis que le reste obtiendra une erreur de 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'exécutable, tout en attendant la fin de la tâche 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/WAIT au début, la tâche LongRunningTask sera exécutée en même temps que les commandes restantes du fichier de commandes. Elle risque donc de créer des problèmes si l’une de ces commandes nécessite la sortie de la tâche LongRunningTask.

Reprise:

Cela ne peut pas fonctionner en parallèle:

  • appelez LongRunningTask.exe

Cela fonctionnera en parallèle et sera ok 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:

  • start/B "" "LongRunningTask.exe" "paramètres"

Cela fonctionnera en parallèle et attendra la fin de la tâche pour que vous puissiez utiliser le résultat:

  • start/B/WAIT "" "LongRunningTask.exe" "paramètres"

Référence de la commande de démarrage: Comment puis-je exécuter un programme à partir d'un fichier de commandes sans laisser la console ouverte après le démarrage du programme?

6
Cherno

Appeler

Appelle un programme batch depuis un autre sans arrêter le programme batch parent. La commande call accepte les libellés 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émarrer

Démarre une fenêtre d'invite de commandes séparée pour exécuter un programme ou une commande spécifique. Utilisé sans paramètre, start ouvre une seconde fenêtre d'invite de commande. https://technet.Microsoft.com/en-us/library/bb491005.aspx

5
Developer