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é?
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.
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
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>
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.
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
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:
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:
Cela fonctionnera en parallèle et attendra la fin de la tâche pour que vous puissiez utiliser le résultat:
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?
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