Чи є одне і те ж командний рядок і MS-DOS?


12

Я посперечався зі своїм другом, що командний рядок - це лише версія GUI MS-DOS, яка працює в середовищі форм Windows. Він повністю не погоджується зі мною.

Хто правий?


2
Що вам сказали досі дослідження?
slhck

4
cmd.exe- це зовсім інший звір від MS-DOS.
Сатьядхіт Бхат

7
MS-DOS - це операційна система. Командний рядок Windows - це інтерфейс, схожий на MS-DOS.
Der Hochstapler


Відповіді:


20

Це колись було правдою, але вже не.

З інтерфейсу командного рядка MS-DOS # Windows - Вікіпедія :

Усі версії Microsoft Windows мали інтерфейс командного рядка (CLI) типу MS-DOS. Це може запускати багато DOS та різного роду утиліти командного рядка Win32, OS / 2 1.x та Posix в одному сеансі командного рядка, дозволяючи проводити прокладку між командами. Користувацький інтерфейс та піктограма до Windows 2000 супроводжувались рідним інтерфейсом MS-DOS.

Споживчі Windows (до 3,11, Win9x, WinME) працювали як графічний інтерфейс користувача (GUI), що працює над MS-DOS. З Windows 95, 98 і ME частина MS-DOS була інтегрована, і обидві операційні системи розглядалися як повний пакет. Командний рядок отримав доступ до командного рядка DOS (зазвичай command.com) через модуль Windows (winoldap.mod).

Новий рядок Windows (Windows NT) завантажується через ядро, єдиною метою якого є завантаження Windows. Не можна запускати програми Win32 в системі завантажувача таким чином, що OS / 2, UNIX або Consumer Windows можуть запускати сеанси символьного режиму.

Так ні, у всіх Windows із сімейства NT (наприклад, XP, Vista, 7, 8) командний рядок та MS-DOS візуально схожі, але зовсім різні.


Власне, я б сказав, що це ніколи не було правдою. Еквівалент був cmd.exeби command.comдосить малою частиною MSDOS.

9

Це різні речі - командний рядок - це не MS-DOS - але, що стосується користувача, вони можуть бути тією ж справою, що й ті самі речі.

Тож це залежить від вашої точки зору. З технічної точки зору ваш друг це виправдає, але з точки зору користувача ви правильно (начебто існують відмінності, які помітить експерт).


Я думаю, ти маєш на увазі протилежне право? Він технічно правильний, тому що вони буквально не одне і те ж, друг - це той, хто практично правильно, тому що вони однакові для користувача.
Бред

@Brad - я прочитав питання, що ОП сказав, що вони однакові, але його друг сказав, що вони не були.
ChrisF

8

Немає.

(Якщо ваше визначення рівності не поширюється на минуле » Це текстовий інтерфейс, і я можу запускати програми з нього. « )

Що запускається, коли ви натискаєте командний рядок у меню "Пуск", це командний процесор Windows, ака cmd.exe. Його вбудовані команди та синтаксис сценаріїв (включаючи багато химерностей) базуються на стародавніх command.comз CP / M та пізніших MS-DOS, але крім цього вони є абсолютно окремими речами. Крім того, command.comце 16-бітна програма, в той час cmd.exeяк це рідна програма консолі Windows.

У Windows 95, 98 і ME command.com все було інакше, де вони запускалися в MS-DOS VM, причому Windows виступала як гіпервізор (так, такі речі вже були на той час). Там у вас була ціла віртуальна машина під управлінням DOS. Але на Windows NT, 2000, XP, Vista та 7 - ні. DOS живе лише там, у ntvdm.exeякому знаходиться віртуальна машина DT NT, яка є лише тонким емуляційним шаром, що фіксує дзвінки, які ЦП не може виконувати безпосередньо (саме тому він працює швидше, але гірше, ніж DOSBox).

У будь-якому випадку, навіть command.comбув просто оболонкою для DOS. Це була не операційна система.

Всередині я насправді притискаю кожного разу, коли бачу людей, що посилаються на вікно із сіро-чорним текстом як MS-DOS. У переважній більшості випадків вони насправді не знають, про що йдеться.


4

Як я розумію, MS-DOS - це дискова операційна система, яку випустила Microsoft. Командний рядок - це не графічний інтерфейс, який дозволяє взаємодіяти з вашою операційною системою.

Command Prompt - програма для інтерпретації командного рядка, доступна в більшості операційних систем Windows, офіційно називається Windows Command Processor, але іноді називається командною оболонкою. Командний рядок - це програма Windows, яка імітує багато можливостей командного рядка, наявних у MS-DOS, але насправді це не MS-DOS.

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

Наприклад, оскільки cmd.exe - це вбудована програма в текстовому режимі для OS / 2, вона може використовувати справжні труби в командних конвеєрах, дозволяючи обом сторонам конвеєра одночасно працювати. Як результат, можна перенаправити стандартну помилку в cmd.exe, на відміну від COMMAND.COM. (COMMAND.COM використовує тимчасові файли і запускає дві сторони послідовно, одна за одною.)

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


2

Ваш друг правий. MS-DOS є / була операційною системою (Microsoft Disk Operating System - це те, що означає абревіатура.) Користувацький інтерфейс для DOS називається командним рядком ( the ).

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

Однак людям все ще потрібна функціональність, що надається командним рядком, і замість command.com ми отримали command.exe (і в наші дні cmd.exe), який під час запуску дає нам командний рядок.

Але це не єдина (ані десь поблизу першої) командного рядка, яку люди використовували. Командні рядки також називаються оболонками, а Unix має багато, а команди різні та часто дуже потужні. Говорячи про владу, Microsoft створила новий командний рядок для Windows під назвою PowerShell, який неймовірно потужний і цікавий. Докладнішу інформацію див. У Вікіпедії: http://en.wikipedia.org/wiki/Command-line_interface#Operating_System_Command-Line_Interfaces


> Користувацький інтерфейс для DOS називається командним рядком (the). Також "командний рядок".
Synetech

та інтерфейс CLI або командного рядка.
Марк Аллен

Технічно CLI - це тип інтерфейсу, а не конкретний примірник. Це було б як виклик Windows в GUI (наприклад, я використовував графічний інтерфейс Windows ). Ви можете сказати , що це, і це технічно правильно / точно, але це було б просто дивно.
Synetech

Я просто називаю це командним рядком. :)
Марк Аллен

Я просто називаю це DOS (принаймні, я звик, якийсь час я неохоче називаю це чистим DOS ).
Synetech

1

Вони не однакові!

Мабуть, багато людей не усвідомлюють, що підказка DOS і командний рядок Windows - це не одне і те ж. Насправді це дві різні програми - COMMAND.COM та CMD.EXE відповідно.

Знайте свої командні підказки

По-перше, через відмінності платформи (DOS проти Windows) та інтерпретатора (command.com проти cmd.exe), будуть очевидні відмінності, наприклад

  • DOS працює у повноекранному режимі без віконного режиму, тому немає жодної mode con:cols=COL lines=ROWкоманди зміни розміру консолі та жодної titleкоманди
  • DOS не підтримує багатозадачність, багатокористувач, реєстр, дозволи, довгі імена файлів, символьні посилання / жорсткі посилання, мережа, Unicode, динамічні диски та підтримка розширених томів ... тому немає інструментів для управління ними

Але також існують великі відмінності у можливостях та синтаксисі внутрішніх команд між command.com та cmd.exe, а також деякі зовнішні інструменти у двох середовищах. У MS-DOS є

  • Немає функцій, кодових блоків ()та локальних областей, що означає

    • for, if... повинно дотримуватися одна команда в одному рядку
    • ні exit /bабоgoto :eof
    • ні setlocalіendlocal
    • gotoможе лише перейти до мітки, callможе запустити лише інший пакетний файл
    • команди не можуть бути згруповані як би

      (
      command1
      command2
      ) >output.txt
      
  • Немає характеру втечі ^. Друк спеціальних символів було б болем, а неможливістю виконання багаторядкових команд

  • Немає спеціальних форматів if
    • ні if cmdextversionіif defined
    • відсутність порівняння рядків із числовими та нечутливими до регістру if [/i] string1 compare-op string2
  • Історія команд та аргумент команд відсутні
  • Немає непрямого розширення (наприклад call set %%var%suffix%=string) змінних і не затримується розширення (наприклад echo !var%suffix%!)
  • Немає вдосконалених маніпуляцій з рядками
    • відсутність ~xxxVпідтримки змінної
    • відсутня підтримка підстрочки %variable:~num1,num2%або заміни рядків%variable:str=newstr%
  • Немає часткової назви змінної для setі
    • ні, set /aтому ви не можете займатися арифметикою
    • ні, set /pщо означає читання вводу користувача - це біль
    • немає set "var=value"синтаксису
  • Ні %*для всього командного рядка
  • Ні for /d, for /rабо for /l. Не for /fтак важко читати вхід з файлів. Єдина форма forDOS - цеFOR %variable IN (set) DO command [command-parameters]
  • Ні findstr, і findне підтримує Unicode
  • Немає спеціальних змінних оточення , такі як%CD% %DATE% %TIME% %RANDOM% %ERRORLEVEL% %CMDEXTVERSION% %CMDCMDLINE% %HIGHESTNUMANODENUMBER%
  • Обмежена можливість зміни каталогу
    • Немає pushd/popd
    • Ні cd /d. Також ні cd path with spacesі cd "path with spaces"через відсутність довгої підтримки імен файлів
  • Немає color
  • Немає forfiles
  • Ні assoc(оскільки немає графічного інтерфейсу, і файли потрібно відкривати вручну з командного рядка, тому асоціація файлів не потрібна)

Дуже багато корисних зовнішніх команд у Windows, як, де, сортування, більше (у деяких версіях DOS), вибір ... також відсутні у DOS


І саме це сказав MS MS Rich Turner

Також Cmd! = MS-DOS!

Я також хочу вказати на поширене оману, сприйняте такими статтями: Cmd <> MS-DOS!

Фактично:

  • Microsoft востаннє поставила "нову" версію MS-DOS (v8.0 в Windows ME) 16 вересня 2000 - 16 років тому (станом на цей текст) !!
  • MS-DOS була операційною системою (хоч і відносно простою ОС за сучасними мірками), основним інтерфейсом користувача якого була оболонка командного рядка, поки Windows 3.x і 9.x не прибули і не працювали на / навколо MS-DOS
  • Мова сценаріїв оболонки командного рядка MS-DOS була порівняно короткою та помірно потужною, але їй бракувало багатьох більш багатих та вдосконалених функцій, якими ми користуємось у сучасних PowerShell, Bash тощо.
  • Хоча пізніші версії MS-DOS зростали вдосконалено і додавали / замінювали деякі старіші збірки новим кодом, написаним на "C", значна частина MS-DOS залишалася написана в збірці x86 для підвищення ефективності, і тому, що це був єдиний спосіб на той час отримати доступ до багатьох апаратних пристроїв та периферійних пристроїв. Це зробило MS-DOS не портативним для процесорів, що не мають x86. Якщо ви настільки схильні, ви можете фактично завантажити вихідний код для MS-DOS v1.1 та v2.0, щоб побачити, скільки саме попередніх версій MS-DOS було написано в складі x86 (підказка: досить багато всього це)!

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


Подальше читання

На закінчення, функціонально вони можуть бути трохи схожими, але в іншому випадку сильно відрізняються


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