Un fichier batch Windows (called.bat
ou called.cmd
) peut être appelé à partir d'un autre fichier de commandes (caller.bat
ou caller.cmd
) ou interactif cmd.exe Invite de plusieurs manières:
called.bat
call called.bat
cmd /c called.bat
start called.bat
J'ai beaucoup de mal à différencier leur utilisation prévue en fonction de leur texte d'aide: quand utiliser lequel? par exemple. pourquoi je pourrais utiliser la commande "call" au lieu de l'appel direct. Qu'est ce qui est different?
Je m'intéresse à un rapport de synthèse qui analyse les 4 possibilités (et d'autres s'il en manque) de différents points de vue: cas d'utilisation recommandés pour lesquels ils sont conçus, processus d'apparition, contexte d'exécution, environnement, traitement du code retour.
Remarque: j'utilise Windows XP SP3.
Le fichier de commandes sera exécuté par l'instance actuelle de cmd.exe (ou une nouvelle instance de cmd.exe si, par exemple, double-cliquez dans l'Explorateur).
Identique à # 1, n'a d'effet que lorsqu'il est utilisé dans un fichier batch/cmd. Dans un fichier batch, sans 'call', le fichier batch parent se termine et le contrôle passe au fichier batch appelé; avec 'call' exécute le fichier batch enfant, et le fichier batch parent continue avec les instructions suivant l'appel.
Exécute le fichier de commandes dans une nouvelle instance de cmd.exe.
Démarrer exécutera le fichier de commandes dans une nouvelle instance de cmd.exe dans une nouvelle fenêtre et l'appelant n'attendra pas la fin.
Une chose ne ressort pas clairement des commentaires ici: Lorsque vous appelez un fichier batch à partir d'un autre en utilisant uniquement son nom (cas n ° 1 dans la question d'origine), l'exécution s'arrête à partir du fichier batch appelant. Par exemple, dans ces lignes:
called.bat
echo Hello
La ligne 'echo Hello' (et tout ce qui la suit) ne sera pas appelée. Si vous utilisez le mot-clé 'call', l'exécution reprend après l'appel. Donc dans ce cas:
call called.bat
echo Hello
La ligne 'echo Hello' sera appelée.
De plus, toutes les variables définies dans le fichier called.bat seront également transmises au processus appelant.
Imaginez un fichier 'called.bat' qui avait cette ligne:
set MYVAR=hello
Ensuite,% MYVAR% serait disponible pour le fichier de commandes appelant s'il utilisait:
call called.bat
Mais il n'utiliserait pas
REM starts a new cmd.exe process
start called.bat
REM stops and replaces current cmd.exe process with a new one
called.bat