web-dev-qa-db-fra.com

Plusieurs façons d'appeler un fichier batch Windows à partir d'un autre ou à partir de l'invite. Lequel dans quel cas?

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:

  1. appel direct: called.bat
  2. en utilisant la commande d'appel: call called.bat
  3. en utilisant la commande cmd: cmd /c called.bat
  4. en utilisant la commande de démarrage: 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.

90
dim
  1. 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).

  2. 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.

  3. Exécute le fichier de commandes dans une nouvelle instance de cmd.exe.

  4. 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.

97
Kyle Alons

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        
3
ken