Question Fichiers batch Windows: .bat vs .cmd?


Si je comprends bien, .bat est l'ancienne convention de dénomination 16 bits, et .cmd est pour Windows 32 bits, c'est-à-dire commençant par NT. Mais je continue à voir des fichiers .bat partout, et ils semblent fonctionner exactement de la même manière en utilisant l'un ou l'autre suffixe. En supposant que mon code n'aura jamais besoin de fonctionner sur un serveur plus ancien que NT, est-ce que cela a vraiment de l'importance? je t'ai eu m'attend en utilisant le mauvais suffixe?


625
2017-09-29 14:39


origine


Réponses:


De ce groupe de nouvelles par Mark Zbikowski lui-même:

Les différences entre .CMD et .BAT en ce qui concerne CMD.EXE   sont: Avec les extensions activées, PATH / APPEND / PROMPT / SET / ASSOC en .CMD   les fichiers définiront ERRORLEVEL indépendamment de l'erreur. .BAT définit ERRORLEVEL   seulement sur les erreurs.


381
2017-09-29 14:41



Voici une compilation d'informations vérifiées à partir des différentes réponses et références citées dans ce fil:

  1. command.com est le processeur de commande 16 bits introduit dans MS-DOS et a également été utilisé dans la série de systèmes d'exploitation Win9x.
  2. cmd.exe est le processeur de commande 32 bits sous Windows NT (les systèmes d'exploitation Windows 64 bits possèdent également une version 64 bits). cmd.exe n'a jamais fait partie de Windows 9x. Il est apparu dans OS / 2 version 1.0, et la version OS / 2 de cmd a commencé 16 bits (mais était néanmoins un programme en mode protégé à part entière avec des commandes comme start). Windows NT hérité cmd à partir de OS / 2, mais la version Win32 de Windows NT a démarré 32 bits. Bien qu'OS / 2 soit passé à 32 bits en 1992, son cmd est resté un programme OS / 2 1.x 16 bits.
  3. le ComSpec variable d'environnement définit quel programme est lancé par .bat et .cmd scripts. (À partir de WinNT, ceci est par défaut cmd.exe.)
  4. cmd.exe est rétrocompatible avec command.com.
  5. Un script conçu pour cmd.exe peut être nommé .cmd pour empêcher l'exécution accidentelle sur Windows 9x. Cette extension de nom de fichier date également de OS / 2 version 1.0 et 1987.

Voici une liste de cmd.exe fonctionnalités qui ne sont pas prises en charge par command.com:

  • Noms de fichiers longs (dépassant le format 8.3)
  • Historique des commandes
  • Fin de l'onglet
  • Caractère d'échappement: ^ (Utiliser pour: \ & | > < ^)
  • Pile de répertoire: PUSHD/POPD
  • Arithmétique entière: SET /A i+=1
  • Rechercher / Remplacer / Sous-chaîne: SET %varname:expression%
  • Substitution de commande: FOR /F (existait avant, a été amélioré)
  • Les fonctions: CALL :label

Ordre d'exécution

Si les deux versions .bat et .cmd d'un script (test.bat, test.cmd) se trouvent dans le même dossier et que vous exécutez le script sans l'extension (test), la version .bat du script sera exécutée par défaut, même sur Windows 7 64 bits. L'ordre d'exécution est contrôlé par la variable d'environnement PATHEXT. Voir Ordre dans lequel l'invite de commande exécute les fichiers pour plus de détails.

Les références:

Wikipédia: Comparaison des coquilles de commande


364
2017-08-17 18:13



Ces réponses sont un peu trop longues et axées sur l'utilisation interactive. Les différences importantes sont:

  • .cmdempêche l'exécution par inadvertance sur les systèmes non-NT.
  • .cmd Active les commandes intégrées pour changer Errorlevel à 0 en cas de succès.

Edit: les extensions de commande sont activées par défaut dans les fichiers .bat et .cmd sous Windows 2000 ou version ultérieure.

En 2012 et au-delà, je recommande d'utiliser .cmd exclusivement.


42
2017-09-29 14:41



Non, ça ne compte pas du tout. Sur NT, l'extension .bat et .cmd font que le processeur cmd.exe traite le fichier exactement de la même manière.

Des informations supplémentaires intéressantes sur Command.com vs cmd.exe sur les systèmes WinNT-classe de la compagnie Microsoft TechNet (http://technet.microsoft.com/en-us/library/cc723564.aspx):

Ce comportement révèle un très subtile   fonctionnalité de Windows NT qui est très   important. Le shell MS-DOS 16 bits   (COMMAND.COM) fourni avec Windows   NT est spécialement conçu pour Windows   NT. Quand une commande est entrée pour   l'exécution par cette coquille, elle ne   en fait l'exécuter. Au lieu de cela,   emballe le texte de la commande et l'envoie   à un shell de commande CMD.EXE 32 bits pour   exécution. Parce que toutes les commandes sont   réellement exécuté par CMD.EXE (le   Shell de commande Windows NT), le 16 bits   shell hérite de toutes les fonctionnalités et   installations de la pleine Windows NT   coquille.


25
2017-07-07 22:47



RÉ: Apparemment quand command.com est invoqué, c'est un peu un mystère complexe;

Il y a quelques mois, au cours d'un projet, nous devions comprendre pourquoi certains programmes que nous voulions exécuter sous CMD.EXE fonctionnaient sous COMMAND.COM. Le "programme" en question était un très ancien fichier .BAT, qui fonctionne toujours tous les jours.

Nous avons découvert que la raison pour laquelle le fichier de commandes s'exécutait sous COMMAND.COM était qu'il était démarré à partir d'un fichier .PIF (également ancien). Étant donné que les paramètres de configuration de mémoire spéciaux disponibles uniquement via un fichier PIF sont devenus inutiles, nous l'avons remplacé par un raccourci de bureau classique.

Le même fichier de commandes, lancé à partir du raccourci, s'exécute dans CMD.EXE. Quand vous y réfléchissez, cela a du sens. La raison pour laquelle il nous a fallu si longtemps pour le comprendre était en partie due au fait que nous avions oublié que son article dans le groupe de démarrage était un PIF, parce qu'il était en production depuis 1998.


15
2018-02-05 14:46



Puisque le post original concernait les conséquences de l'utilisation du fichier .bat ou .cmd suffixe, pas nécessairement les commandes à l'intérieur le fichier...

Une autre différence entre .bat et .cmd est que si deux fichiers existent avec le même nom de fichier et ces deux extensions, alors:

  • entrer nom de fichier ou nom de fichier.bat sur la ligne de commande exécutera le fichier .bat

  • pour exécuter le fichier .cmd, vous devez entrer nom de fichier.cmd


13
2017-11-22 17:04



Pourtant, sur Windows 7, les fichiers BAT ont aussi cette différence: Si vous créez des fichiers TEST.BAT et TEST.CMD dans le même répertoire, et que vous exécutez TEST dans ce répertoire, le fichier BAT sera exécuté.

C:\>echo %PATHEXT%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

C:\Temp>echo echo bat > test.bat

C:\Temp>echo echo cmd > test.cmd

C:\Temp>test

C:\Temp>echo bat
bat

C:\Temp>

10
2017-09-29 14:47