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
ファイル拡張子を使用することをお勧めします。