Corredor

ウェブ、プログラミングの勉強メモ。

「Windows バッチ」は「DOS コマンド」?色々な単語と意味をまとめた

会社で上司相手に「この処理は Windows バッチで…」といった話をしていたら「Windows バッチって DOS コマンドのこと?」と質問され、「ええと、厳密には違うと思うんですけど、多分『DOS コマンドってことで合ってます』と答えて大丈夫だと思います。」って答えたら微妙な雰囲気になって、でも自分もその場で言葉の違いを上手く説明できなかったので、まとめ直してみた。

まずは Wiki ってみる

似たような言葉を Wiki ってみてのぼくの解釈を以下に列挙。リンク先は全て Wikipedia。

呼称 ぼくの解釈
MS-DOS MS-DOS 自体は OS。COMMAND.COM を通して操作する。
COMMAND.COM MS-DOS を操作するコマンドラインインタプリタ
コマンドラインインタプリタ ユーザが入力したコマンドを OS やプログラミング言語に渡す橋渡しをするプログラム。
コマンドラインインタプリタにより、コマンドラインインターフェースを実現する。
コマンドラインインターフェース 文字を入力して文字で結果が出力されるインターフェース。Command Line Interface で CLI。Console UserInterface で CUI と呼ぶこともある。
Character User Interface という呼称は和製英語らしい?
DOS プロンプト MS-DOS におけるコマンドプロンプトほぼ COMMAND.COM と同義。正確には COMMAND.COM を起動したときに表示されるコマンドプロンプト (記号) のこと。
コマンドプロンプト Windows に搭載されている cmd.exe の名称だが、元々はコマンド入力待ち状態であることを表す記号のこと。MS-DOS でいう C:\>、Unix 系でいう $ のことを指す。
cmd.exe Windows NT 系で使われる CLI。COMMAND.COM と同等の機能だが、機能が向上している。
バッチファイル Windows のコマンドプロンプトに行わせたい処理をテキストファイルに書いたもの。シェルプログラムである COMMAND.COM もしくは cmd.exe がファイルを読み込み、1行ずつ実行する。
DOS のバッチファイルは .bat、Windows NT 系では .cmd という拡張子だが、NT 系で .bat を同じように動かすこともでき、違いはない。
シェル ユーザと OS の間に立ってインターフェースを提供するもの。コマンドラインインタプリタと同義。元々は Unix で使用される呼称。
シェルスクリプト コマンドラインインタンプリタ向けに書かれたスクリプト。上述の「バッチファイル」と同義。バッチ処理を行わせたりする。
スクリプト言語 スクリプトは台本。台本のように記述した処理を実行させる、という意味だったり、簡易的に記述できるプログラミング言語、という意味だったりで多少揺れる。
バッチ処理 決められた処理群 (ジョブ) を順に実行していき、一括で処理すること。そのタスクのことをバッチジョブと呼ぶ。

ということでよく分からなくなってきそうなので、いくつかの方向から話をまとめていく。

関連ワードを辿っていく「Windows バッチとは」

  • Windows バッチは、Windows コマンドを記述したバッチファイルのこと。拡張子 .bat が多い。
  • Windows コマンドは、コマンドプロンプトから入力できるコマンドのこと。
  • コマンドプロンプトは、Windows 関係で語られる時は cmd.exe の名称のこと。
  • cmd.exe は、Windows NT 系で使われているコマンドラインインタプリタ
  • コマンドラインインタプリタは、ユーザが入力したコマンドを OS に受け渡すプログラムのこと。Windows 9x 系では cmd.exe ではなく COMMAND.COM が使われていた。
  • COMMAND.COM は、元々は MS-DOS を操作するためのコマンドラインインタプリタ。
  • MS-DOS Windows 3.x は MS-DOS 上で起動しており、Windows 9x 系も MS-DOS を拡張した OS だったため、COMMAND.COM を通じて DOS コマンドが使われた。

.cmd という拡張子をあまり見かけないのは、.bat と動作に違いがなく、単純に言葉の普及率の問題っぽそう。

物凄くザックリと類語整理

OS コマンドラインインタプリタ
= コマンドプロンプト = シェル
バッチファイル = シェルスクリプト
MS-DOS
Windows 3.x・9x
DOS プロンプト (= COMMAND.COM) .bat
Windows NT 系 コマンドプロンプト (= cmd.exe) .cmd.bat (両方イケる)
Unix シェル (Bsh が有名) .sh
Linux シェル (Bash など) .sh
  • コマンドラインインターフェースを実現するためのプログラムがコマンドラインインタプリタ (= DOS プロンプト・COMMAND.COM・コマンドプロンプト・cmd.exe・シェル、に言い換え可能)。

そういうワケで?

自分が持った違和感はこういうことだろう。

  • 「DOS コマンド」と言った時に指すのは、MS-DOS という OS を操作するためのコマンド。コマンドを受け取って実行するコマンドラインインタプリタは COMMAND.COM なイメージがあった。
  • 「Windows バッチ」は、Windows コマンドを記述したファイルのこと。MS-DOS と Windows の関係性から、DOS コマンドと Windows コマンドの言語的な違いはないが、ここで話したかったバッチ処理は OS を操作するものではなかった。

そもそも比較対象とすること自体がおかしかったのだが、要するに「DOS コマンド」という言葉が連想させる OS (= MS-DOS) やそのコマンドラインインタプリタ (=COMMAND.COM) に違和感があったのだろう。ぼくがその時話したかったのは Windows 7 系以降の OS で使われる Windows コマンドを使用して記述した Windows バッチファイルのことで、処理内容も FTP 通信だったりするので OS 自体の操作ではない、と。イメージさせる方向性が違った、そして古かったのだろう。

ちなみに

Windows 98 で登場した Windows Script Host (WSH) は、COMMAND.COM のショボさをなんとかするために出てきたが、WSH はシェルに統合されていないため扱いづらく普及に至らず。

Windows XP で NT 系に統合されたので、COMMAND.COM はお飾りになり、cmd.exe が台頭。

Windows 7 以降の OS には cmd.exe の後継となる Windows PowerShell が標準搭載される。こちらは .NET Framework が基盤になっている。

参考