Windows バッチの.bat ファイルと.cmd ファイルの違い
ユーザーは、COMMAND.COM と cmd.exe を同じものと見なすことがよくあります。また、バッチファイルに使用する拡張子 .bat または .cmd についても混乱しています。
それらは同じですか、それとも異なりますか。また、どの拡張機能を使用するかは重要ですか。これらすべての質問に対する答えは、この記事で説明されています。
バッチファイルを実行すると、コマンドプロンプトで実行されます。バッチファイルは、ほとんどの場合、WindowsNT のバージョンの cmd.exe で実行されます。
古いバージョンでは、COMMAND.COM シェルで実行されます。
COMMAND.COM と cmd.exe の違い
COMMAND.COM と cmd.exe は、MS-DOS と Windows 用のコマンドインタプリタのバージョンです。COMMAND.COM は、16 ビットプログラムを実行するように設計されたコマンドラインシェルです。これは、起動後に最初に実行される DOS プログラムであり、AUTOEXEC.BAT 構成ファイルを実行してシステムをセットアップします。
1980 年に、MS-DOS、Windows 95-98、および WindowsME 用に最初にリリースされました。互換性があり、16 ビットプログラムとして実行するように設計された古いプログラムにのみ役立ち、それ以降は更新されていません。

一方、cmd.exe は COMMAND.COM の後継です。32 ビットプログラム用に設計されており、1987 年に OS / 2、Windows NT、および WindowsCE 用にリリースされました。
COMMAND.COM と比較して、cmd.exe は、詳細なエラーメッセージなどの優れた拡張機能を提供し、コマンド履歴を確認するための矢印キーをサポートし、遅延変数拡張をサポートし、内部コマンドを改善しました。

バッチファイルは、コマンドを保存し、コマンドラインインタープリターによって順番に実行できるスクリプトファイルです。 .bat ファイル名拡張子は MS-DOS と Windows で使用され、バッチファイルで使用される最初の拡張子でしたが、.cmd は WindowsNT ファミリと OS/2 で使用されます。
.cmd ファイルは cmd.exe でのみ実行できます。これは、COMMAND.COM がこの拡張子を認識しないためです。
このチュートリアルでは、.bat ファイルと .cmd ファイルの主な違いについて説明します。
Windows バッチ .bat ファイルと .cmd ファイルの主な違い
.bat と .cmd の重要な主な違いを以下で説明します。
ERRORLEVEL 処理
.bat と .cmd は、ERRORLEVEL 変数を異なる方法で処理します。ERRORLEVEL が呼び出されると、.bat は、実際のエラーが発生した場合にのみ状態を変更します。つまり、append、dpath、ftype、set、path、assoc などのコマンドの場合です。 、.bat は ERRORLEVEL を設定しません。
ただし、.cmd の場合、実際のエラーに関係なく ERRORLEVEL が設定されます。正常に実行された後でも、ERRORLEVEL は 0 にリセットされます。
スクリプトの作成中に混乱が生じることがあるため、ユーザーはこれに注意する必要があります。
実行順序
環境変数 PATHEXT は実行順序を制御します。実行は、PATHEXT 変数に格納されている変数の順序によって異なります。
.bat スクリプトと .cmd スクリプトの両方が同じフォルダに保存されている場合、拡張子なしでスクリプトを実行すると、最初に .bat ファイルが実行され、次に .cmd ファイルが実行されます。PATHEXT 変数のデフォルトの順序は次のとおりです。
ECHO %PATHEXT%

ただし、PATHEXT 変数で拡張子の順序を変更できます。PATHEXT 変数を削除しても、順序は Windows の MS-DOS バージョンと同じになります。
サポート
Windows バージョンのサポートに関しては、.cmd ファイルは、.bat ファイルの場合と同じではないほとんどすべての Windows バージョンでサポートされています。 .bat は当初 MS-DOS 用に開発されましたが、.cmd は Windows NT 用に開発されたため、.cmd ファイルは WindowsNT 以外のシステムでは実行されません。
.bat のスクリプトは、.cmd と比較して古いものです。また、.cmd は、.bat ファイルと比較した場合に下位互換性があります。
安全
セキュリティに関しては、.cmd は .bat より安全です。 .bat ファイル内のコマンドはシリアルに保存され、コマンドを 1 行ずつ実行するため、セキュリティ攻撃を受けやすくなります。 .cmd ファイルはコマンドを順番に実行しないため、.bat ファイルよりも安全です。
.cmd ファイルは、.cmd ファイルの表示、インストール、実行を可能にするアプリケーションを介して Android で使用することもできます。 .bat ファイルは Android ではサポートされていません。
使用言語
.bat ファイルには、MS-DOS 用に以前に開発された古いバージョンの Microsoft 言語が含まれています。 .cmd は、新しいバージョンの Windows 用に開発されたプログラミング言語およびインタプリタです。
拡張子のないバッチファイルを実行すると、.bat として実行されますが、.cmd ファイル拡張子の場合は、ファイル名を filename.cmd として入力する必要があります。このケースは、両方の拡張子が同じファイル名を持っている場合にのみ適用されます。 .cmd はファイルを実行するための拡張子を提供する必要がありますが、.bat ファイルは拡張子を必要とせずにプログラムを直接実行します。
次の画像に示すように、同じファイル名 testfile で拡張子が異なる .bat と .cmd の 2つのバッチファイルがあります。 .bat ファイルは Windows バッチファイルとして保存され、.cmd は Windows コマンドスクリプトとして保存されます。

.bat ファイルの実行:

.cmd ファイルの実行:

作業環境
.bat ファイルは、32 ビット Windows で 16 ビットプログラムを実行する Windows プロセスである NTVDM 環境で実行するように設計されています。NTVDM は、Windows NT Virtual DOS Machine の略で、ntvdm.exe として実行されます。
これはシステムにとって重要なプログラムであり、プログラムを安定して実行するために削除しないでください。 .bat ファイルはこの環境で実行されるため、すべての環境でサポートされますが、.cmd ファイルは 16 ビット環境では実行できません。
また、.cmd ファイルは実行前にメモリに保存されますが、.bat ファイルはコマンドをメモリに保存せずに 1 行ずつ実行します。
通訳者
.bat ファイル拡張子の付いたバッチファイルは、COMMAND.COM と cmd.exe の両方で実行できますが、両方のインタープリターはファイルの実行方法が異なります。 .cmd ファイルは cmd.exe でのみ実行されます。
COMSPEC 環境変数は、バッチファイルのコマンドラインインタープリターを起動するために使用されます。デフォルトでは、MS-DOS などの古いバージョンでは COMMAND.COM に設定されています。
Windows NT 以降、デフォルトで cmd.exe になります。その内容を表示するには、次のコマンドを実行します。
ECHO %COMSPEC%

そのため、新しいバージョンの Windows は cmd.exe で実行されます。ただし、古いバージョンでは、.bat ファイルのみが実行されます。
まとめ
そこで、バッチファイル拡張子 .bat と .cmd の重要な違いについて説明しました。どちらもお互いに利点があります。
結論として、.bat ファイルで機能するものはすべて、.cmd ファイルでも機能する必要があります。 .cmd ファイルは、.bat ファイルよりも高速で安定しています。
適切な拡張機能の使用は、要件によって異なります。ただし、新しいバージョンでは、.cmd ファイル拡張子を使用することをお勧めします。