limelight

自己顕示欲こそ人間らしさ

バッチプログラミングの第一歩 バッチファイルでhello, world!

はじめに

皆さん、Windowsはお使いですか?

今回はMacLinuxユーザーの方向けの話ではないので、今後公開しそうなシェルスクリプト記事までお楽しみに・・・

さて、話を戻します。

 

皆さんがお使いのWindowsは基本GUIベースのOSになります。

GUIというのは要するにマウスでクリック・ドラッグができるような視覚的にわかりやすい操作形態のことです。グラフィカルユーザーインターフェースとも言います。

皆さんが見慣れてるこれのことですね↓

f:id:iris_cell:20210124122342p:plainでもWindowsにはもう一つ、GUIではない"顔"が存在します。

その顔こそが、今回の本題「バッチファイル」に繋がるCUI(あるいはCLI)というものです。

こんな感じの黒い画面や・・・

f:id:iris_cell:20210124134453p:plain

こんな感じの青い画面↓

f:id:iris_cell:20210124134402p:plain

これらがWindowsのもう一つの顔である「CLI(コマンドラインインターフェイス)」、または「CUI(キャラクユーザーインターフェイス)」というものなのですね。

GUIとは対を成す、グラフィカルな要素が皆無と言って良い、文字通り「文字だけで操作する」画面のことです。(グラフィックは作ろうと思えば作れなくもないですが・・・)

様々な呼び方はあるかと思いますが、これから本記事では「CUI」で呼称を統一することとします。

COMMAND.COMとCMD.EXEとPowershell.EXE

さて上述した「CUI」ですが、Windowsの進化と共に様々なCUIが搭載されたり削除されてきたことはご存知でしょうか?

まずWindowsのご先祖様となったOSが「MS-DOS」というものです。

これはGUIが搭載されておらず、完全に「CUIだけ」のOSで、当時はコマンド入力だけでコンピューターを操作していました。

そのMS-DOSでユーザーとの対話を行うために起動していたシステムこそが現在のコマンドプロンプトのご先祖様である「COMMAND.COM」なのです。

この.COMは実行可能ファイルの一つで、なんとか.comのドメインとは全く関係ないらしいです。

そしてそのMS-DOSにグラフィカルなインターフェイスをつけるための拡張システムとして登場したのが、まさに「Windows」な訳です。

実際Windows9x系統のOSのブートプロセスではMS-DOSが立ち上がっていたようです。

そして時代の流れとともにWindowsGUIメインのOSとなっていったわけですが、そのWindowsにも一時期までCOMMAND.COMCUIアプリケーションとして装備されていました。

そしてCOMMAND.COMが廃止され、さらに高機能なcmd.exeが誕生しました。

どう高機能になったかを説明するとめっちゃ長くなるので、Wikipediaさんを見てください

ja.wikipedia.org

しかし、これらのCUIGUIメインのWindowsにおいて全ての管理機能の自動化ができるとは言い難いものでした。

そこでMicrosoft社がWindows 7から新たに導入したCUIが「Windows Powershell」というわけです。

この青い背景が特徴です↓

f:id:iris_cell:20210124122621p:plain

個人的にはUnix系コマンドが全てエイリアスされているので、例えば「clear」や「ls」が使えるので高速な操作が可能なのが高得点。

ただ色々出来すぎるが故なのか若干重いですがあんまり気にしませんね。

バッチファイルって何なのよ

先程ご紹介したCUI達にはさらに2つの"顔"が存在します。

一つは「対話型」という顔。

f:id:iris_cell:20210124124952p:plain

こんな感じで一行ずつコメントを打っていくタイプのやつですね。

ハッカーとかのイメージが強い操作方法です。(偏見)

そしてもう一つの顔こそが「バッチモード」という、コマンドを書き記したファイルを読み込み、すべて自動でコマンドを実行してくれるモードです。

要するに予め人間様が「CUIよ、こんな感じで動いてくれや」という台本を用意し、コマンドプロンプトやパワーシェルがそのバッチファイルという台本通りに動作してくれるモードというわけです。

Unix系では「シェルスクリプト」というものですね。WindowsのライバルであるMacUnix系ですので、この「シェルスクリプト」を使うことで自動化することが出来ます。

わざわざバッチファイル使う意味って何よ

確かに普通にWindowsを使っているだけだと大してメリットを感じないですよね。

それどころか今やPythonでコマンド実行が可能な時代ですから、バッチファイルを知らない人も結構居るようです。

ですが、慣れてしまえば簡単な操作をバッチファイルで自動化したほうがよっぽど楽な上に、PCを買い替えてもバッチファイルの移行さえしてしまえば特に何もせずとも実行するだけで今までの操作が自動化できるメリットがあります。

PythonだとPythonをインストールするところから始めないといけないので、高度なことをしないのであればバッチファイルで十分かと思います。

バッチファイルの第一歩~echoを使って文字を表示させるぞ~

それでは、実際にこの文字をバッチファイルに記述してみましょう↓

@echo off

echo hello, world!

ちなみにメモ帳で書いて、保存時に拡張子を「.bat」にすることでバッチファイルになります。

お手軽ですね。

「@echo off」とは、実行されたコマンドを表示しない設定で、通常バッチファイルに@echo offを記述せずにただコマンドを書いて記述するだけだとこんな結果になります↓

f:id:iris_cell:20210124131937p:plain

@echo offを記述するとこうなります↓

f:id:iris_cell:20210124132957p:plain

でも正直コマンドを表示させる意味ってあまりないので、世に出回っているバッチファイルの殆どは@echo offが記述されてると思います。

ここがUnix系のシェルスクリプトとの違いで、シェルスクリプトはこの記述をしなくても実行コマンドが表示されない仕様のはずです。

 

そして肝心な「echo」コマンドは、単語の意味通り「文字を表示させる」コマンドです。

今回のように文字を表示させる使い方はあまりないと思いますが、例えば・・・

ECHO hello, world! > input.txt

という使い方をすれば、特定の文字をファイルに書き込む使い方ができます。

なので、このコマンドはただプロンプトに表示させる役割だけを担うわけではないということを覚えておいてください。

 

さらにここで注目してもらいたいのは、「表示したい文字にダブルクォーテーションがついていない」ことです。

PythonPHP等のプログラミング言語をやっていると、ついついstring型にはダブルクォーテーションを付けたくなるものですが、バッチファイルはstring型やinteger型関係なく文字にクォーテーションやダブルクォーテーションをつける必要がありません。

もし付けると、ダブルクォーテーションごと表示されます。こんな感じで↓

f:id:iris_cell:20210124133901p:plain

まとめ

・コンピューターにはCUIGUIがある。

Windowsに搭載されている(されていた)CUIは「COMMAND.COM」「CMD.EXE」「Powershell」。

・バッチファイルはCUIで入力するコマンドをあらかじめまとめて記述することで同時に実行することができるファイルのこと。

・@echo offで入力コマンドを表示しないようにすることが可能なコマンド。

・ECHOコマンドには文字を表示させる以外にもファイルに文字を記述することも可能である。

・バッチファイルプログラムではstring型だろうとinteger型だろうとダブルクォーテーションを付ける必要はなし(つけるとダブルクォーテーションごと表示される)

 

・・・という感じで今回は終わりたいと思います。

もっとやっていけばユーザー入力を受け付けることができたりif文での条件分岐なんかもできるようになって、簡単な割にちょっと複雑なことができたりするので、引き続き見ていただけると嬉しいです。