コマンドプロンプトはWindowsフォーム環境で機能するMS-DOSのGUIバージョンにすぎないと友人と主張しました。彼は私に全く同意しません。
誰が正しいのですか?
cmd.exe
MS-DOSとはまったく異なる獣です。
コマンドプロンプトはWindowsフォーム環境で機能するMS-DOSのGUIバージョンにすぎないと友人と主張しました。彼は私に全く同意しません。
誰が正しいのですか?
cmd.exe
MS-DOSとはまったく異なる獣です。
回答:
これはかつて真実でしたが、それはもうありません。
MS-DOSから#Windowsコマンドラインインターフェイス-ウィキペディア:
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
。その組み込みコマンドとスクリプト構文(多くの癖を含む)はcommand.com
、CP / Mおよびそれ以降のMS-DOS の古いものに基づいていますが、それ以外は完全に別のものです。また、command.com
はcmd.exe
ネイティブのWindowsコンソールアプリケーションであり、16ビットプログラムです。
Windows 95、98、およびME command.com
では、Windowsがハイパーバイザーとして機能するMS-DOS VMで実行される点が異なりました(そうです、そのようなことは、当時すでに行われていました)。そこでは、DOSを実行する仮想マシン全体がありました。しかし、Windows NT、2000、XP、Vistaおよび7では、違います。DOS ntvdm.exe
は、CPUが直接実行できない呼び出しをキャプチャする薄いエミュレーションレイヤーである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は/ DOS用UIが(と呼ばれている(マイクロソフトディスクオペレーティングシステムの頭字語が何の略かである。)オペレーティングシステムだっれる)コマンドプロンプト。
Windowsの最初のいくつかのバージョンはDOSの上で動作しました(技術的に動作する環境になりましたが、誰もそれを区別しているのかはわかりません)が、NTカーネル以降のOSは動作しませんでした-DOSはなくなりました。
しかし、人々は依然としてコマンドプロンプトによって提供される機能を必要としており、command.comの代わりにcommand.exe(および最近のcmd.exe)を取得しました。実行すると、コマンドプロンプトが表示されます。
しかし、それが人々が使用した唯一の(または最初の近くの)コマンドプロンプトだけではありません。コマンドプロンプトはシェルとも呼ばれ、Unixには多くのコマンドがあり、コマンドは異なり、多くの場合非常に強力です。Powerと言えば、MicrosoftはPowerShellと呼ばれるWindows用の新しいコマンドプロンプトを作成しました。これは信じられないほど強力で興味深いものです。詳細については、Wikipediaを参照してください: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
コマンドもコマンドもありません。ただし、2つの環境では、command.comとcmd.exeの内部コマンドの機能と構文、および一部の外部ツールにも大きな違いがあります。MS-DOSには
関数、コードブロック()
、ローカルスコープはありません。
for
、if
...の後には、同じ行に1つのコマンドが続く必要があります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
ファイルから読み込むので、入力も困難です。for
DOS の唯一の形式は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
ファイルとどう違うのですか?結論として、機能的にはそれらは少し似ているかもしれませんが、それ以外は大きく異なります