Яка різниця між CMD та Command-рядком у вікнах?


30

До цього часу я ніколи не думав (і ніколи не спостерігав) про це cmdі commandє дві різні речі. Що ж, вони?

Погляньте на цей малюнок:

введіть тут опис зображення

Насправді я зазвичай відкриваюсь cmdіз діалогового вікна «Запуск», коли мені хочеться командного рядка (для Git / VIM). Отже, я налаштував розташування дисплея, шрифт, колір і т. Д. Сьогодні я для зміни набрав команду commandRun замість cmdі виявив, що у моєму вікні є щось нове. У вікні "DOS".

Отже, очевидно, має бути різниця між cmdі command. Я хотів би знати

  1. Різниця між ними.
  2. Чому Microsoft розділила їх (Unix & Linux має за замовчуванням лише одну оболонку, Bash).

11
Я б припустив, що command.comце застаріла 16-бітна версія (доступна лише для 32-бітних установок). Він не існує в моїй 64-
бітовій

11
У UNIX та Linux доступно більше ніж одна оболонка . Оболонка за замовчуванням зазвичай Bash.
ephsmith

@ephsmith ось що я сказав ..
Сурія,

Зауважте, що словосполучення "командний рядок" технічно може використовуватися для позначення або command.exe, або cmd.exe, але на практиці майже завжди використовується для позначення cmd.exe.
Гаррі Джонстон

У Unix всього чотири оболонки - це csh, ksh, bash, zsh.
Деб

Відповіді:


31

TL; DR

При запуску 32-бітної консольної програми вона виконується cmd; коли ви запускаєте 16-бітну консольну програму, вона виконується command.

Деталі

Windows XP включає підсистему для підтримки старих 16-бітних програм.

Старі 16-бітні програми доступні як у програмах DOS, так і Windows. Програми DOS за своєю природою є консольними програмами та працюють у тому, що схоже на командний рядок. Однак 32-розрядні програми консолі Windows дуже схожі і виглядають однаково.

Командний процесор / інтерпретатор cmdмає кілька цілей:

  • Для виконання 32-бітної текстової програми консолі Windows
  • Для того, щоб забезпечити і обробляти різні функції командного рядка ( dir, copyі т.д.)
  • Інтерпретація та виконання пакетних файлів (сумісних з DOS .batфайлів та NT-сумісних .cmdфайлів)

Під час запуску старої 16-бітної консольної програми вона виконується NTVDM (Windows NT Virtual DOS Machine). Він надає емульовану систему DOS (отже, і віртуальну машину DOS ), яка схожа на запуск спеціалізованого програмного забезпечення віртуальної машини, за винятком того, що шар емуляції є більш простим. commandце 16-розрядна версія командного інтерпретатора, що набагато ближче до фактичного DOS, ніж cmd.exeнасправді програма Windows (і має заголовок Windows PE, на відміну від command.comякої має заголовок DOS MZ).

commandмає ті самі цілі, cmdщо і лише те, що він підтримує лише 16-бітні програми. Крім того, він не підтримує .cmdфайли і має меншу кількість вбудованих команд і обмежений у своєму синтаксисі ( cmdце новіший, сучасніший, більш просунутий інтерпретатор командного рядка, подібний до 4DOS ).

Однак він підтримує графічні програми DOS (як і старі ігри), але успіх їх запуску залежить від драйверів відеокарт та характеру програми. Існує чимало сайтів, які пропонують різні хитрощі, щоб змусити DOS-ігри працювати на Windows (хоча успіх у Vista і вище зазвичай обмежений, ніж на XP).

Слід зазначити, що 64-розрядні версії Windows повністю відмовилися від підтримки 16-бітних програм, і тому взагалі не включають command, тому ні DOS, ні 16-бітні програми Windows не запускатимуться, а замість цього викинуть (вводить в оману) повідомлення про помилку .


Технічні примітки

command.comмає .comрозширення для зворотної сумісності з програмами DOS, але, як і більшість інших версій Windows для зовнішніх команд DOS, внутрішньо, це фактично файл Windows PE .exe. Це дає цікаве зауваження, що, хоча Windows використовує розширення як індикатор того, як обробляти більшість типів файлів, для виконавчих файлів він ігнорує розширення і розглядає його вміст (інакше .exeанкета не працює, якщо трактуватись як a .com). Це питання стосується цього ефекту.


Хоча ви, звичайно, можете запускати 32-бітну консольну програму з cmd.exe, вам цього не потрібно. Якщо двічі клацнути виконуваний файл консольного режиму, він не працює "всередині" cmd.exe. Аналогічно, command.exe насправді не те саме, що NTVDM.
Гаррі Джонстон

1
Я ненавиджу починати речення з назвою команди.
Synetech

> command.exe насправді не те саме, що NTVDM Ні, але це його частина , разом з кількома DLL (я навчився цьому важким шляхом, намагаючись отримати 16-бітні консольні програми для роботи в системі XP ).
Synetech

"Програми DOS за своєю природою є консольними програмами " - Чому ви це сказали? Невже неприродні програми для команд DOS, що не є TUI, неприродними? :)
Каран

Why would you say this? Are non-command line non-TUI DOS apps 'unnatural' in some way? Типу. У 9 разів вони були чудовими, але графічні додатки (наприклад, ігри) більше не працюють належним чином, якщо взагалі в XP +, тому переважна більшість додатків DOS, які сьогодні працюють у Windows (справді), справді є інструментами командного рядка замість повноцінні, графічні програми. На 64-бітних машин, 16-розрядні програми не працюють спочатку взагалі, але навіть 32-розрядні додатки, як правило , консольних додатків, особливо з Vista , припинена підтримка для повноекранних консолей .
Synetech

8

На відміну від COMMAND.COM, що є програмою DOS, cmd.exe - це вбудована програма Windows, яка зазвичай працює в консолі Win32. Це дозволяє їй скористатися функціями, доступними для рідних програм на платформі, які в іншому випадку недоступні для програм DOS.

також ...

І OS / 2, і версія Windows NT cmd.exe мають більш детальні повідомлення про помилки, ніж ковдра "Неправильна команда або ім'я файлу" (у випадку неправильних команд) команди command.com.

Ось з цього інформативного статті у Вікіпедії.

Згадується про те, як старіші команди command.com були переведені на новіші функції cmd.exe ... наприклад ...

функціональність deltree (command.com) була згорнута в rd (cmd.exe) у вигляді параметра / s

Тож сміливо читайте.


5

command.com - оболонка DOS, передбачена сумісністю.

cmd.exe це рідна програма Win32, успадкована від OS / 2.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.