web-dev-qa-db-ja.com

コマンドプロンプトとMS-DOSは同じものですか?

コマンドプロンプトは、MS-DOSのGUIバージョンであり、Windowsフォーム環境で機能することを友人と主張しました。彼は私に全く反対します。

誰が正しいのですか?

12
user978733

これはかつて真実でしたが、それはもうありません。

MS-DOS#Windowsコマンドラインインターフェイス-Wikipedia から:

Microsoft Windowsのすべてのバージョンには、コマンドラインインターフェイス(CLI)のようなMS-DOSがありました。これにより、多くのDOSとさまざまなWin32、OS/2 1.x、およびPosixコマンドラインユーティリティを同じコマンドラインセッションで実行でき、コマンド間のパイプが可能になります。ユーザーインターフェイス、およびWindows 2000までのアイコンは、ネイティブのMS-DOSインターフェイスに従いました。

コンシューマーウィンドウ(最大3.11、Win9x、WinME)は、MS-DOSの上で実行されるグラフィカルユーザーインターフェイス(GUI)として実行されました。 Windows 95、98、およびMEでは、MS-DOSパーツが統合され、両方のオペレーティングシステムが完全なパッケージとして扱われました。コマンドラインは、Windowsモジュール(winoldap.mod)を介してDOSコマンドライン(通常はcommand.com)にアクセスしました。

Windowsの新しいライン(Windows NT)は、Windowsをロードすることのみを目的とするカーネルを介して起動します。 OS/2、UNIX、またはコンシューマWindowsがキャラクタモードセッションを起動できるように、ローダーシステムでWin32アプリケーションを実行することはできません。

したがって、NTファミリのすべてのWindows(XP、Vista、7、8など)では、コマンドプロンプトとMS-DOSは視覚的には似ていますが、まったく異なります。

20
Dennis

それらは異なるものです- コマンドプロンプトはMS-DOSではありません -しかし、ユーザーに関する限り、それらはできます彼らが同じことをするのと同じこと。

したがって、それはあなたの視点に依存します。技術的な観点からはあなたの友人は正しいですが、ユーザーの観点からはあなたは正しいです(専門家が見つけるであろう違いがあるように)。

9
ChrisF

いいえ

(同等性の定義が過去に及ばない限り"これはテキストインターフェースであり、そこからプログラムを実行できます。"

スタートメニューでコマンドプロンプトをクリックしたときに実行されるのは、Windowsコマンドプロセッサ(別名cmd.exe)です。その組み込みコマンドとスクリプト構文(多くの癖を含む)は、CP/Mおよびそれ以降のMS-DOSの古いcommand.comに基づいていますが、それ以外は完全に別のものです。また、command.comは16ビットプログラムであり、cmd.exeはネイティブのWindowsコンソールアプリケーションです。

Windows 95、98、およびMEでは状況が異なり、command.comMS-DOSで実行されますVM Windowsがハイパーバイザーとして機能している場合 (はい、当時はそのようなものでした。DOSを実行している仮想マシン全体がありましたが、Windows NT、2000、XP、Vistaおよび7では、DOSはntvdm.exeにのみ存在します。 NT仮想DOSマシンは、CPUが直接実行できない呼び出しをキャプチャする薄いエミュレーションレイヤーです(そのため、DOSBoxよりも高速で動作しますが、性能は劣ります)。

いずれにせよ、command.comもDOSの単なるシェルでした。それはオペレーティングシステムではありませんでした。

内部では、人々が黒地に灰色のテキストが付いたウィンドウをMS-DOSと呼んでいるのを見るたびに、私は実際にうんざりしています。ほとんどの場合、彼らは彼らが何を指しているのか実際には知りません。

8
Joey

MS-DOSは、マイクロソフトがリリースしたディスクオペレーティングシステムです。コマンドプロンプトは、オペレーティングシステムとの対話を可能にする非グラフィカルインターフェイスです。

コマンドプロンプトは、ほとんどのWindowsオペレーティングシステムで使用できるコマンドラインインタープリターアプリケーションであり、正式にはWindowsコマンドプロセッサーと呼ばれますが、コマンドシェルと呼ばれることもあります。コマンドプロンプトは、MS-DOSで使用できるコマンドライン機能の多くをエミュレートするWindowsプログラムですが、実際にはMS-DOSではありません。

コマンドプロンプトは、MS-DOSのcommand.comのGUIバージョンです。 cmd.exeは、通常Win32コンソールで実行されるネイティブWindowsアプリケーションです。これにより、プラットフォーム上のネイティブプログラムで利用できる機能を利用できますが、そうでなければDOSプログラムでは利用できません。

たとえば、cmd.exeはOS/2のネイティブテキストモードアプリケーションであるため、コマンドパイプラインで実際のパイプを使用して、パイプラインの両側を同時に実行できます。その結果、COMMAND.COMとは異なり、cmd.exeの標準エラーをリダイレクトできます。 (COMMAND.COMは一時ファイルを使用し、2つのサイドを順番に連続して実行します。)

実際には、cmd.exeは、DOSのようなコマンドラインインタープリターとして機能するWindowsプログラムです。一般的に互換性がありますが、COMMAND.COMの制限の一部に対処する拡張機能を提供します(上記の説明はWikipediaで参照されています)。

4
Thu Yein Tun

あなたの友達は正しいです。 MS-DOSはオペレーティングシステムです(Microsoft Diskオペレーティングシステムは頭字語を表します)。DOSのUIは(the)と呼ばれます。コマンド・プロンプト。

Windowsの最初のいくつかのバージョンはDOSの上で動作しました(技術的に動作する環境になりましたが、誰もそれを区別することはできません)。しかし、NTカーネル以降のOSは動作しませんでした-DOSはなくなっていました。

ただし、人々は依然としてコマンドプロンプトによって提供される機能を必要としており、command.comの代わりにcommand.exe(および最近のcmd.exe)を取得しました。実行すると、コマンドプロンプトが表示されます。

しかし、それは人々が使用した唯一の(または最初の近くのどこでも)コマンドプロンプトではありません。コマンドプロンプトはシェルとも呼ばれ、Unixには多くのコマンドがあり、コマンドは異なり、多くの場合非常に強力です。パワーと言えば、MicrosoftはPowerShellと呼ばれるWindows用の新しいコマンドプロンプトを作成しました。これは非常に強力で興味深いものです。詳しくはウィキペディアを参照してください: http://en.wikipedia.org/wiki/Command-line_interface#Operating_System_Command-Line_Interfaces

2
Mark Allen

彼らは同じではありません!

どうやら多くの人がDOSプロンプトとWindowsコマンドプロンプトが同じではないことに気づいていません。それらは実際には2つの異なるプログラム-COMMAND.COMとCMD.EXEです。

コマンドプロンプトを確認する

まず、プラットフォーム(DOSとWindows)とインタープリター(command.comとcmd.exe)の違いにより、のような明らかな相違点があります。

  • DOSはウィンドウモードなしでフルスクリーンで実行されるため、コンソールのサイズを変更する_mode con:cols=COL lines=ROW_コマンド、およびtitleコマンドはありません
  • DOSは、マルチタスク、マルチユーザー、レジストリ、アクセス許可、長いファイル名、シンボリックリンク/ハードリンク、ネットワーク、Unicode、ダイナミックディスク、および高度なボリュームをサポートしていません...これらを管理するツールはありません

ただし、command.comとcmd.exeの間の内部コマンドの機能と構文、および2つの外部ツールの一部には、大きな違いもあります。環境。 MS-DOSには

  • 関数なし、コードブロック_()_およびローカルスコープ

    • forif...の後にはsingle同じ行のコマンド
    • _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_がないため、ファイルからの入力の読み取りも困難です。 DOSでのforの唯一の形式は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なし(GUIがなく、ファイルをコマンドラインから手動で開く必要があるため、ファイルの関連付けは必要ありません)

Where、sort、more(一部のDOSバージョン)、choice ...のようなWindowsの便利な外部コマンドの多くはDOSにもありません


そして、これはMSのリッチターナーが言ったことです

また、Cmd!= MS-DOS!

また、上記のような記事によって永続化される一般的な誤解を指摘したいと思います。Cmd<> MS-DOS!

実際には:

  • Microsoftは、2000年9月16〜16年前(この記事の執筆時点)に、MS-DOSの「新しい」バージョン(Windows MEではv8.0)を最後に出荷しました。
  • MS-DOSはオペレーティングシステム(今日の標準では比較的単純なOSですが)であり、その主要なユーザーインターフェイスはコマンドラインシェルでした。
  • MS-DOSのコマンドラインシェルのスクリプト言語は比較的簡潔で適度に強力でしたが、現代のPowerShell、Bashなどで使用できる、より豊富で高度な機能の多くが欠けていました。
  • 新しいバージョンのMS-DOSは洗練されて成長し、古いアセンブリの一部を「C」で記述された新しいコードで追加/置き換えましたが、MS-DOSの多くは効率のためにx86アセンブリで記述されたままでした。多くのハードウェアデバイスと周辺機器にアクセスできます。これにより、MS-DOSは非x86 CPUに移植できなくなりました。意欲がある場合は、実際にMS-DOS v1.1およびv2.0のソースコードをダウンロードして、MS-DOSの以前のバージョンのどれだけがx86アセンブリで記述されているかを確認できます(ヒント:ほとんどすべてのそれ)!

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


参考文献

結論として、機能的にはそれらは少し似ているかもしれませんが、それ以外は大きく異なります

1
phuclv