L'invite de commande et MS-DOS sont-ils la même chose?


12

J'ai argumenté avec mon ami que l' invite de commande n'est qu'une version graphique de MS-DOS qui fonctionne dans l'environnement de formulaires Windows. Il est totalement en désaccord avec moi.

Qui a raison?


2
Qu'est-ce que vos recherches vous ont montré jusqu'à présent?
slhck

4
cmd.exeest une bête complètement différente de MS-DOS.
Sathyajith Bhat

7
MS-DOS est un système d'exploitation. L'invite de commandes Windows est une interface qui ressemble à MS-DOS.
Der Hochstapler


Réponses:


20

C'était vrai une fois, mais ce n'est plus le cas.

À partir de l' interface de ligne de commande MS-DOS # Windows - Wikipedia :

Toutes les versions de Microsoft Windows ont une interface de ligne de commande (CLI) de type MS-DOS. Cela pourrait exécuter de nombreux utilitaires de ligne de commande DOS et divers Win32, OS / 2 1.x et Posix dans la même session de ligne de commande, permettant la canalisation entre les commandes. L'interface utilisateur et l'icône jusqu'à Windows 2000 ont suivi l'interface native MS-DOS.

Windows grand public (jusqu'à 3.11, Win9x, WinME) s'exécutait en tant qu'interface utilisateur graphique (GUI) fonctionnant au-dessus de MS-DOS. Avec Windows 95, 98 et ME, la partie MS-DOS a été intégrée, traitant les deux systèmes d'exploitation comme un package complet. La ligne de commande a accédé à la ligne de commande DOS (généralement command.com), via un module Windows (winoldap.mod).

Une nouvelle ligne de Windows, (Windows NT), démarre via un noyau dont le seul but est de charger Windows. On ne peut pas exécuter des applications Win32 dans le système de chargement de la manière dont OS / 2, UNIX ou Windows grand public peuvent lancer des sessions en mode caractère.

Donc non, dans chaque Windows de la famille NT (par exemple, XP, Vista, 7, 8), l'invite de commande et MS-DOS sont visuellement similaires, mais assez différents.


En fait, je dirais que cela n'a jamais été vrai. L'équivalent de cmd.exeaurait été command.com, une assez petite partie de MSDOS.

9

Ce sont des choses différentes - l' invite de commande n'est pas MS-DOS - mais en ce qui concerne l'utilisateur, elles peuvent être la même chose que les mêmes choses.

Cela dépend donc de votre point de vue. D'un point de vue technique, votre ami a raison, mais du point de vue de l'utilisateur, vous avez raison (en quelque sorte, car il y a des différences qu'un expert remarquerait).


Je pense que vous voulez dire le contraire à droite? C'est lui qui est techniquement correct parce que ce n'est pas littéralement la même chose, l'ami est celui qui a pratiquement raison parce que c'est la même chose pour l'utilisateur.
Brad

@Brad - la façon dont j'ai lu la question était que le PO a dit que c'était pareil mais son ami a dit que ce n'était pas le cas.
ChrisF

8

Non.

(À moins que votre définition de l'égalité ne s'étende pas au-delà » C'est une interface texte et je peux y exécuter des programmes. « )

Ce qui est exécuté lorsque vous cliquez sur Invite de commandes dans le menu Démarrer est le processeur de commandes Windows, alias cmd.exe. Ses commandes intégrées et sa syntaxe de script (y compris de nombreuses bizarreries) sont basées sur l'ancien command.comde CP / M et plus tard MS-DOS, mais en dehors de cela, ce sont des choses complètement distinctes. Il command.coms'agit également d'un programme 16 bits et d' cmd.exeune application de console Windows native.

Les choses étaient différentes dans Windows 95, 98 et ME où command.com elles seraient exécutées dans une machine virtuelle MS-DOS avec Windows agissant comme hyperviseur (oui, ils avaient déjà ce genre de choses à l'époque). Là, vous aviez une machine virtuelle entière exécutant DOS. Mais sous Windows NT, 2000, XP, Vista et 7 - non. DOS ne vit que là-bas, dans ntvdm.exelequel se trouve la machine DOS virtuelle NT qui n'est qu'une fine couche d'émulation capturant les appels que le processeur ne peut pas exécuter directement (c'est pourquoi il fonctionne plus rapidement mais pire que DOSBox).

En tout cas, even command.comn'était qu'un shell pour DOS. Ce n'était pas le système d'exploitation.

À l'intérieur, je grince des dents chaque fois que je vois des gens se référer à une fenêtre avec du texte gris sur noir comme MS-DOS. Dans la grande majorité des cas, ils ne savent pas de quoi ils parlent.


4

D'après ce que je comprends, MS-DOS est le système d'exploitation de disque que Microsoft a publié. L'invite de commande est une interface non graphique qui vous permet d'interagir avec votre système d'exploitation.

L'invite de commande est une application d'interpréteur de ligne de commande disponible dans la plupart des systèmes d'exploitation Windows, officiellement appelée Windows Command Processor mais parfois appelée shell de commande. L'invite de commandes est un programme Windows qui émule la plupart des capacités de ligne de commande disponibles dans MS-DOS mais ce n'est pas réellement MS-DOS.

L'invite de commandes est une version graphique de command.com dans MS-DOS. cmd.exe est une application Windows native s'exécutant généralement dans une console Win32. Cela lui permet de tirer parti des fonctionnalités disponibles pour les programmes natifs sur la plate-forme qui ne sont pas disponibles pour les programmes DOS.

Par exemple, comme cmd.exe est une application native en mode texte sur OS / 2, elle peut utiliser de vrais canaux dans les pipelines de commandes, permettant aux deux côtés du pipeline de s'exécuter simultanément. Par conséquent, il est possible de rediriger l'erreur standard dans cmd.exe, contrairement à COMMAND.COM. (COMMAND.COM utilise des fichiers temporaires et exécute les deux côtés en série, l'un après l'autre.)

En réalité, cmd.exe est un programme Windows qui agit comme un interpréteur de ligne de commande de type DOS. Il est généralement compatible, mais fournit des extensions qui corrigent certaines des limitations de COMMAND.COM (les explications ci-dessus sont référencées par Wikipedia).


2

Votre ami a raison. MS-DOS est / était un système d'exploitation (Microsoft Disk Operating System est ce que l'acronyme signifie.) L'interface utilisateur pour DOS est appelée ( l' invite de commande).

Les premières versions de Windows fonctionnaient au-dessus de DOS (ce qui en fait des environnements fonctionnant techniquement, bien que je ne sois plus sûr que personne fasse cette distinction), mais les systèmes d'exploitation ultérieurs, à commencer par le noyau NT, ne l'ont pas fait - DOS a disparu.

Cependant, les gens avaient toujours besoin de la fonctionnalité fournie par l'invite de commande, et au lieu de command.com, nous avons obtenu command.exe (et de nos jours cmd.exe), qui lors de l'exécution nous donne une invite de commande.

Mais ce n'est pas la seule (ni nulle part près de la première) invite de commande que les gens ont utilisée. Les invites de commande sont également appelées Shells, et Unix en a beaucoup, et les commandes sont différentes et souvent très puissantes. En parlant de Power, Microsoft a créé une nouvelle invite de commande pour Windows appelée PowerShell qui est incroyablement puissante et intéressante. Voir Wikipedia pour plus: http://en.wikipedia.org/wiki/Command-line_interface#Operating_System_Command-Line_Interfaces


> L'interface utilisateur pour DOS est appelée (la) invite de commande. Aussi «ligne de commande».
Synetech

et interface CLI ou ligne de commande.
Mark Allen

Techniquement, CLI est un type d'interface, pas une instance particulière de celle-ci. Ce serait comme appeler Windows une interface graphique (par exemple, j'ai utilisé l'interface graphique Windows ). Vous pouvez le dire, et c'est techniquement vrai / précis, mais ce serait juste bizarre.
Synetech

Je l'appelle simplement une invite de commande. :)
Mark Allen

Je l'appelle juste DOS (au moins je le faisais depuis un certain temps maintenant, je l'appelle à contrecœur DOS pur ).
Synetech

1

Ce ne sont pas les mêmes!

Apparemment, beaucoup de gens ne réalisent pas que l'invite DOS et l'invite de commande Windows ne sont pas la même chose. Ce sont en fait deux programmes différents - COMMAND.COM et CMD.EXE respectivement.

Apprenez à connaître vos commandes

Tout d'abord en raison des différences de plate-forme (DOS vs Windows) et d'interprète (command.com vs cmd.exe), il y aura des différences évidentes comme

  • DOS s'exécute en plein écran sans mode fenêtré, donc pas de mode con:cols=COL lines=ROWcommande pour redimensionner la console, et pas de titlecommande
  • DOS ne prend pas en charge le multitâche, le multi-utilisateur, le registre, les autorisations, les noms de fichiers longs, les liens symboliques / hardlinks, le réseau, Unicode, les disques dynamiques et la prise en charge des volumes avancés ... donc aucun outil pour les gérer

Mais il existe également des différences majeures dans les capacités et la syntaxe des commandes internes entre command.com et cmd.exe, ainsi que certains outils externes dans les deux environnements. Dans MS-DOS, il y a

  • Pas de fonctions, blocs de code ()et étendues locales qui signifient

    • for, if... doit être suivi d'une seule commande sur la même ligne
    • non exit /bougoto :eof
    • non setlocaletendlocal
    • gotone peut accéder qu'à une étiquette, callne peut démarrer qu'un autre fichier de commandes
    • les commandes ne peuvent pas être regroupées comme

      (
      command1
      command2
      ) >output.txt
      
  • Aucun personnage d'échappement ^. L'impression de caractères spéciaux serait pénible et aucune possibilité d'exécuter des commandes multilignes

  • Pas de formats spéciaux de if
    • non if cmdextversionetif defined
    • pas de comparaison de chaîne numérique et insensible à la casse if [/i] string1 compare-op string2
  • Pas d'historique de commande et de complétion d'argument de commande
  • Aucune expansion indirecte (par exemple call set %%var%suffix%=string) des variables et aucune expansion retardée (par exemple echo !var%suffix%!)
  • Aucune manipulation de chaîne avancée
    • pas de ~xxxVsupport variable
    • pas de %variable:~num1,num2%support de remplacement de sous - chaîne ou de chaîne%variable:str=newstr%
  • Aucun nom de variable partielle correspondant à set, et
    • non, set /adonc vous ne pouvez pas faire d'arithmétique
    • non, set /pce qui signifie que lire les entrées des utilisateurs est une douleur
    • pas de set "var=value"syntaxe
  • Non %*pour toute la ligne de commande
  • Non for /d, for /rou for /l. Non for /f, la lecture des entrées à partir de fichiers est également difficile. La seule forme forsous DOS estFOR %variable IN (set) DO command [command-parameters]
  • Non findstr, et findne prend pas en charge Unicode
  • Aucune variable d'environnement spéciale comme%CD% %DATE% %TIME% %RANDOM% %ERRORLEVEL% %CMDEXTVERSION% %CMDCMDLINE% %HIGHESTNUMANODENUMBER%
  • Capacité de changement d'annuaire limitée
    • Non pushd/popd
    • Non cd /d. Non cd path with spaceset en cd "path with spaces"raison du manque de prise en charge des noms de fichiers longs
  • Non color
  • Non forfiles
  • Non assoc(car il n'y a pas d'interface graphique et les fichiers doivent être ouverts manuellement à partir de la ligne de commande, donc aucune association de fichiers n'est nécessaire)

Beaucoup de commandes externes utiles dans Windows comme où, trier, plus (dans certaines versions DOS), choix ... manquent également dans DOS


Et c'est ce que Rich Turner de MS a dit

Aussi, Cmd! = MS-DOS!

Je tiens également à souligner une idée fausse commune perpétuée par des articles comme ceux ci-dessus: Cmd <> MS-DOS!

En réalité:

  • La dernière livraison de Microsoft a été une "nouvelle" version de MS-DOS (v8.0 dans Windows ME), le 16 septembre 2000 - il y a 16 ans (à ce jour) !!
  • MS-DOS était un système d'exploitation (bien qu'un système d'exploitation relativement simple selon les normes actuelles) dont l'interface utilisateur principale était un shell de ligne de commande, jusqu'à ce que Windows 3.x et 9.x arrivent et s'exécutent sur / autour de MS-DOS
  • Le langage de script du shell de ligne de commande de MS-DOS était relativement laconique et modérément puissant, mais manquait de nombreuses fonctionnalités plus riches et plus avancées dont nous bénéficions dans PowerShell, Bash, etc.
  • Alors que les versions ultérieures de MS-DOS ont gagné en sophistication et ajouté / remplacé un ancien assemblage par un nouveau code écrit en «C», une grande partie de MS-DOS est restée écrite en assemblage x86 pour plus d'efficacité, et parce que c'était le seul moyen à l'époque de accéder à de nombreux périphériques et périphériques matériels. Cela a rendu MS-DOS non portable pour les CPU non x86. Si vous êtes si enclin, vous pouvez réellement télécharger le code source pour MS-DOS v1.1 et v2.0 pour voir à quel point les versions antérieures de MS-DOS ont été écrites en assemblage x86 (indice: à peu près tout il)!

https://devblogs.microsoft.com/commandline/rumors-of-cmds-death-have-been-greatly-exaggerated/


Lectures complémentaires

En conclusion, en termes de fonctionnalités, ils peuvent être un peu similaires, mais sinon extrêmement différents


1
Wow, cela ressemble à une excellente réponse pour Quelle est la différence entre CMD et invite de commande dans Windows? aussi
SamB
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.