170 votes

Commande CALL vs. START avec l'option /WAIT

Comment fonctionne la commande START avec une option WAIT ?

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

... est-il différent de l'utilisation de la 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é ?

3 votes

Jetez un coup d'œil à technet.microsoft.com/fr/us/library/bb491005.aspx est à propos de START et technet.microsoft.com/fr/us/library/bb490873.aspx est à propos de l'APPEL

213voto

jeb Points 26035

Para exe les fichiers, je suppose que les différences sont presque insignifiantes.
Mais pour commencer un exe vous n'avez même pas besoin CALL .

Quand on commence une autre fournée, la différence est grande,
comme CALL le lancera dans la même fenêtre et le batch appelé aura accès au même contexte de variables.
Il peut donc également modifier 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 de start /wait <prog>
- Les modifications des variables d'environnement sont perdues lorsque le <prog> termine
- L'appelant attend que le <prog> est terminé

Utilisation de call <prog>
- Pour exe il peut être omis, car il équivaut à un simple démarrage. <prog>
- Pour un exe-prog le lot appelant attend ou lance le exe asynchrone, mais le comportement dépend de l'interface de l'utilisateur. exe lui-même.
- Pour lot le lot de l'appelant continue, lorsque l'appelé <batch-file> se termine, SANS appel, le contrôle ne reviendra pas au lot de l'appelant.

Addendum :

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

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

Sera étendu à (à partir d'un fichier batch)

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

30 votes

Lorsque vous exécutez un fichier.bat en utilisant START /WAIT, vous devez spécifier START /WAIT cmd /c "file.bat" plutôt que START /WAIT "file.bat", sinon la fenêtre cmd créée pour le fichier.bat restera ouverte.

5 votes

Vous pouvez trouver la comparaison entre CALL et START sur le site : ss64.com/nt/start.html (mise à jour aujourd'hui avec les sections "Start /Wait" et "START vs CALL")

0 votes

Mon préféré est start /wait /b cmd /c <batchfile.bat> parce que les fichiers batch sont exécutés l'un après l'autre dans la même fenêtre de commande.

19voto

mckeejm Points 1108

Je pense que leurs performances devraient être globalement les mêmes, mais il y a quelques différences. START est généralement utilisé pour lancer des applications ou pour lancer l'application par défaut pour un type de fichier donné. Ainsi, si vous START http://mywebsite.com il ne le fait pas START iexplore.exe http://mywebsite.com .

START myworddoc.docx lancerait Microsoft Word et ouvrirait monworddoc.docx. CALL myworddoc.docx fait la même chose... cependant START fournit plus d'options pour l'état de la fenêtre et des choses de cette nature. Il permet également de définir la priorité et l'affinité des processus.

En bref, étant donné les options supplémentaires offertes par Start, il 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.

12voto

aedjp Points 121

Il existe une différence utile entre call y start /wait lors de l'appel regsvr32.exe /s par exemple, également référencé par Gary dans dans sa réponse à comment-obtenir-le-code-de-sortie-d'application-d'une-ligne-de-commande-Windows

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

retournera toujours 0 mais

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

retournera le niveau d'erreur de regsvr32.exe

8voto

Cherno Points 309

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 exécute une tâche longue appelée LongRunningTask.exe

Si vous appelez l'exe directement à partir du fichier bat, seul le premier appel à la LongRunningTask aboutira, tandis que les autres obtiendront une erreur OS "Le fichier est déjà utilisé par le processus".

Si vous utilisez cette commande :

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

Vous pourrez exécuter plusieurs instances du bat et de l'exe, tout en attendant que la tâche se termine avant que le bat ne continue à 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 paramètre /WAIT au début, la tâche longue sera exécutée en même temps que les autres commandes du fichier batch, ce qui peut créer des problèmes si l'une de ces commandes nécessite la sortie de la tâche longue.

Reprise :

Cela ne peut pas fonctionner en parallèle :

  • appeler LongRunningTask.exe

Ceci s'exécutera en parallèle et sera correct tant qu'il n'y aura pas de dépendance de données entre la sortie de la commande et le reste du fichier bat :

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

Cette opération s'exécutera en parallèle et attendra que la tâche se termine, de sorte que vous pouvez utiliser la sortie :

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

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 ?

7voto

Clark Kent Points 5845

Appelez

Appeler un programme batch à partir d'un autre sans arrêter le programme batch parent. La commande d'appel accepte les étiquettes comme cible de l'appel. Call n'a aucun effet sur la ligne de commande lorsqu'elle est utilisée en dehors d'un script ou d'un fichier batch. https://technet.microsoft.com/en-us/library/bb490873.aspx

Début

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X