コマンドプロンプトは、MS-DOSのGUIバージョンであり、Windowsフォーム環境で機能することを友人と主張しました。彼は私に全く反対します。
誰が正しいのですか?
これはかつて真実でしたが、それはもうありません。
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は視覚的には似ていますが、まったく異なります。
それらは異なるものです- コマンドプロンプトはMS-DOSではありません -しかし、ユーザーに関する限り、それらはできます彼らが同じことをするのと同じこと。
したがって、それはあなたの視点に依存します。技術的な観点からはあなたの友人は正しいですが、ユーザーの観点からはあなたは正しいです(専門家が見つけるであろう違いがあるように)。
(同等性の定義が過去に及ばない限り"これはテキストインターフェースであり、そこからプログラムを実行できます。")
スタートメニューでコマンドプロンプトをクリックしたときに実行されるのは、Windowsコマンドプロセッサ(別名cmd.exe
)です。その組み込みコマンドとスクリプト構文(多くの癖を含む)は、CP/Mおよびそれ以降のMS-DOSの古いcommand.com
に基づいていますが、それ以外は完全に別のものです。また、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
にのみ存在します。 NT仮想DOSマシンは、CPUが直接実行できない呼び出しをキャプチャする薄いエミュレーションレイヤーです(そのため、DOSBoxよりも高速で動作しますが、性能は劣ります)。
いずれにせよ、command.com
もDOSの単なるシェルでした。それはオペレーティングシステムではありませんでした。
内部では、人々が黒地に灰色のテキストが付いたウィンドウをMS-DOSと呼んでいるのを見るたびに、私は実際にうんざりしています。ほとんどの場合、彼らは彼らが何を指しているのか実際には知りません。
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で参照されています)。
あなたの友達は正しいです。 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
どうやら多くの人がDOSプロンプトとWindowsコマンドプロンプトが同じではないことに気づいていません。それらは実際には2つの異なるプログラム-COMMAND.COMとCMD.EXEです。
まず、プラットフォーム(DOSとWindows)とインタープリター(command.comとcmd.exe)の違いにより、のような明らかな相違点があります。
mode con:cols=COL lines=ROW
_コマンド、およびtitle
コマンドはありませんただし、command.comとcmd.exeの間の内部コマンドの機能と構文、および2つの外部ツールの一部には、大きな違いもあります。環境。 MS-DOSには
関数なし、コードブロック_()
_およびローカルスコープ
for
、if
...の後には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/
.bat
_ファイルは、古いMS DOS _.bat
_ファイルとどう違うのですか?結論として、機能的にはそれらは少し似ているかもしれませんが、それ以外は大きく異なります