バッチファイル
テンプレート:Infobox file format
バッチファイル(Batch File)とは、MS-DOS、OS/2、Windowsでのコマンドプロンプト(シェル)に行わせたい命令列をテキストファイルに記述したもの。バッチファイルを実行すると、シェルプログラム(一般に COMMAND.COM
やcmd.exe
)がそのファイルを読み、その中のコマンドを(通常)一行ずつ実行する。バッチファイルはUNIX系オペレーティングシステムのシェルスクリプトに相当する。
DOSのバッチファイルの拡張子は.BAT
である。他の環境のバッチファイルの拡張子は様々である。例えば、Windows NTやOS/2では.CMD
が使われており、4DOS というフリーウェアでは .BTM
が使われている。
AUTOEXEC.BAT
はブート処理の中で実行される特別なバッチファイル(自動実行バッチファイル)である。
歴史
マイクロソフトのDOSとWindowsのバッチプログラミングはこれらのオペレーティングシステム(OS)製品のリリースとともに発展してきた。これらOSに付属するコマンドインタプリタは2つの動作モードを持つ。一つは対話モード(コマンドプロンプトに従ってユーザーがコマンドを入力すると即座に実行される)とバッチモード(予め設定されたコマンド列を実行する)である。どちらのモードもUNIXのシェルや1980年代初期のCP/Mなどのコマンドインターフェイスがその考え方のベースとなっている。
MS-DOSオペレーティングシステムのバッチプログラム用インタプリタはCOMMAND.COM
である。MS-DOS用バッチプログラムのうち比較的単純なコマンドはCOMMAND.COM
自身が処理し(内部コマンド)、複雑なものは別の実行ファイルを呼び出して処理する(外部コマンド)。この系統のバッチプログラミングはMS-DOSからWindows 95、Windows 98、Windows Meまで発展していった。
最近のWindows(Windows 2000とWindows XP)はMS-DOSではなくWindows NTに基づいている。この系統ではcmd.exe
というコマンド行インタプリタが使われ、COMMAND.COM
とはある程度の互換性がある。MS-DOSのいくつかの機能が削除されているが、MS-DOSやMS-DOSベースのWindowsにはない新たな機能も多く追加されている。互換性維持のためCOMMAND.COM
も未だに搭載されている。
@echo off
バッチファイルはコマンド行を実行する前に標準出力にその内容を表示するのがデフォルト動作となっている。これは通常必要とされないので echo off
コマンドをバッチファイルの最初に記述してそれを防ぐ。しかし、そのままでは echo off
コマンド自体は表示されてしまう。@
をコマンド行の先頭に置くと、その行は表示されないようになっているので、多くのバッチファイルには @echo off
という行が先頭にある。
例
単純なバッチファイルの例:
@echo off
cls
echo.
echo Hello World, press any key to start AProgram.exe!
pause > nul
AProgram.exe
echo.
echo AProgram has finished whatever it was doing. Have fun today!
代表的なサンプル例①:Hello world!!
@echo off
echo Hello world!!
pause >nul
代表的なサンプル例②:Fizz Buzz (3の倍数ならFizz、5の倍数ならBuzz、15の倍数ならFizz Buzz と表示し、FizzBuzz.txt に結果を出力)
@echo off
set c=0
echo Fizz Buss Plogram >fizzbuzz.txt
:loop
set /a c+=1, d=c%%3, e=c%%5
if %d%%e% == 00 (
set out=%c% Fizz Buzz
)else if %d% == 0 (
set out=%c% Fizz
)else if %e% == 0 (
set out=%c% Buzz
)else (
set out=%c%
)
echo %out%
>>fizzbuzz.txt echo %out%
goto loop
噂される危険性
バッチファイルを使ったいたずらファイルなどがyoutubeなどに出ている。 なかでも、ウィルスという触れ込みでアップしているものがある。 だが、それについては、ほぼ確実に嘘や投稿者の勘違いである。 悪質なジョークプログラムを作ることはできるが、基本的にはウィルスを製造することはできない。
動画投稿サイトにアップロードされているプログラムの例:
@echo off
start
start
start
start
start
:
:
:
以下、startを繰り返す
互換コマンドインタプリタ
マイクロソフト以外が提供するコマンドインタプリタにも様々なコマンドインタプリタがあり、強化された機能を提供している。4DOS はその一例である。
バッチプログラムを実行ファイルに変換するコンパイラもマイクロソフト以外からいくつか登場しているが、その品質は様々である。
IBMのOS/2オペレーティングシステムもマイクロソフトのOSと似たようなテキストベースのコマンド機能を持っている。