Quelle est la différence entre CMD et invite de commande dans Windows?

30

Jusqu'à présent, je n'ai jamais pensé (et jamais observé) cela cmdet ce commandsont deux choses différentes. Eh bien, le sont-ils?

Jetez un oeil à cette photo:

entrez la description de l'image ici

En fait, j'ouvre généralement à cmdpartir de la boîte de dialogue Exécuter chaque fois que je veux en ligne de commande (pour Git / VIM). J'ai donc personnalisé la position d'affichage, la police, la couleur, etc. Aujourd'hui, pour changer, j'ai tapé commandExécuter au lieu de cmdet j'ai constaté qu'il y avait quelque chose de nouveau sur ma fenêtre. Il a "DOS" dans sa fenêtre.

Donc, évidemment, il devrait y avoir une différence entre cmdet command. J'aimerais savoir

  1. La différence entre eux.
  2. Pourquoi Microsoft les a séparés (Unix et Linux n'a qu'un seul shell par défaut, Bash).
Surya
la source
11
Je suppose que command.comc'est la version 16 bits héritée (uniquement disponible sur les installations 32 bits). Il n'existe pas sur ma version 64 bits de Windows 7.
Der Hochstapler
11
UNIX et Linux ont plus d'un seul shell disponible. Le shell par défaut est généralement Bash.
ephsmith
@ephsmith c'est ce que j'ai dit ..
Surya
Notez que l'expression «invite de commande» pourrait techniquement être utilisée pour faire référence à command.exe ou cmd.exe, mais dans la pratique, elle est presque toujours utilisée pour désigner cmd.exe.
Harry Johnston
Unix a un total de quatre shell, csh, ksh, bash, zsh.
Deb

Réponses:

31

TL; DR

Lorsque vous exécutez un programme de console 32 bits, il est exécuté par cmd; lorsque vous exécutez un programme de console 16 bits, il est exécuté par command.

Détails

Windows XP inclut un sous-système pour prendre en charge les anciennes applications 16 bits.

Les anciennes applications 16 bits sont disponibles sous forme de programmes DOS et Windows. Les programmes DOS, de par leur nature, sont des applications console et s'exécutent dans ce qui ressemble à l'invite de commande. Cependant, les applications de console Windows 32 bits sont très similaires et se ressemblent.

Le processeur / interprète de commande cmda plusieurs objectifs:

  • Pour exécuter un programme de console Windows de texte 32 bits
  • Fournir et gérer les différentes fonctions de ligne de commande ( dir, copy, etc.)
  • Interpréter et exécuter des fichiers batch ( .batfichiers compatibles DOS et .cmdfichiers compatibles NT )

Lorsque vous exécutez un ancien programme de console 16 bits, il est exécuté par le NTVDM (Windows DOS Virtual DOS Machine). Il fournit un système DOS émulé (d'où la machine DOS virtuelle ) qui est similaire à l'exécution d'un logiciel de machine virtuelle dédié, sauf que la couche d'émulation est plus simple. commandest une version 16 bits de l'interpréteur de commandes qui est beaucoup plus proche du DOS réel que cmd.exequi est en fait un programme Windows (et a l'en-tête Windows PE, contrairement à celui command.comqui a l'en-tête DOS MZ).

commanda les mêmes objectifs que le cmdfait qu'il ne prend en charge que les programmes 16 bits. De plus, il ne prend pas en charge les .cmdfichiers et a moins de commandes intégrées et est plus limité dans sa syntaxe ( cmdest un interpréteur de ligne de commande plus récent, plus moderne et plus avancé, similaire à 4DOS ).

Cependant, il prend en charge les programmes graphiques DOS (comme les anciens jeux), mais le succès de leur exécution dépend des pilotes de la carte vidéo et de la nature du programme. Il existe de nombreux sites qui offrent diverses astuces pour exécuter les jeux DOS sur Windows (bien que le succès sur Vista et plus soit généralement plus limité que sur XP).

Il convient de noter que les versions 64 bits de Windows ont complètement abandonné la prise en charge des programmes 16 bits, et ne les incluent donc pas commanddu tout, donc ni les programmes DOS ni Windows 16 bits ne s'exécuteront et, à la place, lanceront un message d'erreur (trompeur) .


Notes techniques

command.coma une .comextension pour la compatibilité descendante avec les programmes DOS, mais comme la plupart des autres versions Windows des commandes DOS externes, en interne, il s'agit en fait d'un .exefichier Windows PE . Cela fournit l'observation intéressante que, bien que Windows utilise l'extension comme indicateur de la façon de gérer la plupart des types de fichiers, pour les fichiers exécutables, il ignore l'extension et examine son contenu (sinon un .exene fonctionnerait pas s'il était traité comme un .com). Cette question concerne cet effet.

Synetech
la source
Bien que vous puissiez bien sûr exécuter un programme de console 32 bits à partir de cmd.exe, vous n'êtes pas obligé de le faire. Si vous double-cliquez sur un fichier exécutable en mode console, il ne s'exécute pas "inside" cmd.exe. De même, command.exe n'est pas vraiment la même chose que NTVDM.
Harry Johnston
1
Je déteste commencer une phrase avec un nom de commande.
Synetech
> command.exe n'est pas vraiment la même chose que le NTVDM Non, mais il en fait partie , avec plusieurs DLL (j'ai appris cela à la dure en essayant de faire fonctionner des applications de console 16 bits sur un système XP ).
Synetech
"Les programmes DOS sont par nature des applications console " - Pourquoi diriez-vous cela? Les applications DOS non-ligne de commande non-TUI sont-elles «contre nature» d'une manière ou d'une autre? :)
Karan
Why would you say this? Are non-command line non-TUI DOS apps 'unnatural' in some way? Sorte de. Dans 9x, ils allaient bien, mais les applications graphiques (par exemple, les jeux) ne fonctionnent plus correctement, voire pas du tout dans XP +, de sorte que la grande majorité des applications DOS exécutées sur Windows (nativement) de nos jours sont en effet des outils de ligne de commande au lieu de applications graphiques complètes. Sur les machines 64 bits, les applications 16 bits ne s'exécutent pas du tout en mode natif, mais même les applications 32 bits sont généralement des applications de console, d'autant plus que Vista a supprimé la prise en charge des consoles plein écran .
Synetech
8

Contrairement à COMMAND.COM, qui est un programme DOS, cmd.exe est une application Windows native s'exécutant généralement dans la console Win32. Cela lui permet de tirer parti des fonctionnalités disponibles pour les programmes natifs de la plate-forme qui ne sont pas disponibles pour les programmes DOS.

également...

Les versions OS / 2 et Windows NT de cmd.exe contiennent des messages d'erreur plus détaillés que la couverture "Nom de fichier ou de commande incorrect" (dans le cas de commandes mal formées) de command.com.

C'est de cet article Wikipedia informatif .

Il est fait mention de la façon dont les anciennes commandes command.com ont été intégrées aux nouvelles fonctionnalités cmd.exe ... par exemple ...

la fonctionnalité de deltree (command.com) a été intégrée dans rd (cmd.exe) sous la forme du paramètre / s

Alors, n'hésitez pas à lire.

Bon Gart
la source
5

command.com est le shell DOS, fourni pour des raisons de compatibilité.

cmd.exe est un programme natif Win32, hérité d'OS / 2.

kinokijuf
la source