連載
» 2018年03月08日 05時00分 公開

Tech TIPS:Windowsのバッチファイルの基本的な使い方 (1/4)

Windows OSの管理業務では、コマンドプロンプトを使った作業も少なくない。いつも決まったことを行う定型処理が多ければ、バッチファイルにしていつでも簡単に実行できるようにしておくと便利だ。本記事では、基本的なバッチファイルの作成/利用方法についてまとめておく。

[打越浩幸,デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

対象OS:Windows 7/Windows 8.1/Windows 10/Windows Server 2008 R2/Windows Server 2012/Windows Server 2012 R2/Windows Server 2016


バッチとは?

 「バッチバッチコマンド)」とは、複数のコマンド列をあらかじめ「バッチファイル」と呼ばれるテキストファイルに記述しておいて、それらを順番に実行させる機能のことである。コマンドプロンプトを開いてCUIで作業する場合、通常は手動でコマンドやパス名などをいちいち入力するが、それをあらかじめファイルに記述したものがバッチである。

 ファイルのコピーやバックアップ、システムの設定変更、連続するツールやコマンドの実行、フィルタ処理など、コマンドプロンプト上でいつも決まった処理をすることが多い場合、それらの処理をバッチファイル化しておけば、すぐに繰り返し実行できるようになる。またタスクに登録することにより、毎日や毎週など、ある決まった時間に起動して処理することも可能になる。

 Windows OSで利用できるスクリプト実行環境としては、バッチ以外にもWSHやPowerShellなども利用できる(解説「PowerShell vs WSH」参照)。だが、バッチは非常に古くから提供されているため(Windows OSの前身のMS-DOS時代から利用できる機能である)、どのWindows OS上でも、ほとんど同じように利用できるという利点がある。基本的には、単にコマンド列を列挙しておくぐらいの機能しか持っていないため、バッチファイルを作成するのも簡単だ。

 とはいえ、歴史的な経緯からバッチファイルには固有の(クセがあるといってもいい)機能や制限などが幾つかあるので、本TIPSでは基本的なバッチファイルの作成/利用方法についてまとめておく。対象はWindows 7/Windows Server 2008 R2以降とする。とはいえバッチの仕様は、Windows NTからWindows 2000になる時にいくらか機能が強化されたぐらいで、それ以降、あまり大きな変化はない。

バッチファイルの基本

 Windows OSのバッチファイルは単なるテキストファイルである。そのため、メモ帳などを使って実行したいコマンド列を列挙し、文字コードを「ANSI」あるいは「Shift-JIS」形式にして保存すればよい(「Unicode」や「UTF-8」形式は不可)。ファイルの拡張子は「.bat」か「.cmd」のいずれかにしておく。どちらでも違いはないが、今なら.cmdでよいだろう。

 バッチファイルの各行には、実行したいコマンドを(基本的には)1行ずつ記述する。例えば、コマンドプロンプトの文字コード(表示モード)を切り替える「chcp.exe」というコマンドがあるが、これをバッチファイルで使う場合は次のようにすればよい(chcpについては次の記事参照)。

バッチファイルの例 簡単なバッチファイルの例
バッチファイルとは、実行するコマンドをテキストファイルとして列挙したもの。同じ処理を後で繰り返したい場合は、バッチにしておくと簡単に実行できる。

 先頭に「@echo off」という記述があるが、これは実行中のコマンド列を以後は画面に表示させないようにするための定型コマンドである。これがないと、いちいち実行するコマンド列が画面に表示されて煩わしいためだ。

 ただし、バッチファイルの作成中やテスト、デバッグ中はこのコマンドを使わずに、何が実行されるのかを確認した方がいいだろう。バッチにはステップ実行環境などのデバッグ機能がないので、表示を抑制していると、何が起こっているか把握できない。バッチファイルが完成したら、先頭にこの行を追加して完成させる。

 なお「@echo off」ではなく単に「echo off」だと、この行そのものは表示され、次の行から非表示になる。さらにバッチでは行頭に「@」があると、その行だけは非表示になるが、いちいち全ての行頭に「@」を付けるのは面倒なので、通常はバッチの先頭で「@echo off」を実行する。

 2行目にある「setlocal」は、環境変数に対するset操作をローカル化するコマンドである。@echo offと共に、バッチの決まり文句のようなものだと思っておけばよいだろう。

 setlocalがあると、このバッチファイル中で環境変数を作成したり、値を変更したりしても、バッチの終了後は元の値に戻る。だがこれがないと、バッチ内で環境変数の値を変更すると、その結果はバッチの終了後(もしくはendlocalコマンドの実行後)もそのまま残る。そのため、環境変数の値を書き換えるバッチを作りたい場合は、setlocalは入れてはいけない。

 3行目には「rem 〜」があるが、これはコメントを表すコマンドであり、この行は実行されることはない。バッチファイルの説明などを記述しておこう。

 4行目にある「chcp 〜」が実際に実行されるコマンドである。実行したいコマンドや処理などを1行ずつ記述しておく。

 バッチファイルを作る場合は、まずコマンドプロンプト上でコマンドを手動で入力して実行し、正しく実行できるかどうか確認してから、コマンド列をバッチファイルに貼り付けるとよい。コマンドの履歴の確認やコピー方法などについては、次の記事を参照していただきたい。

 コマンドプロンプトのオプション設定画面にある「簡易編集モード」を有効にしておくと、マウスでドラッグするだけで簡単にコピーできる。

バッチの実行と中断

 作成したバッチファイルは、例えばus.cmdなら「us」と入力するだけで実行できる。バッチファイルがカレントフォルダ以外にある場合は、「c:\command\us」のように、フルパス名や相対パス名で指定すればよい。

 これ以外にも、[ファイル名を指定して実行]ダイアログでバッチファイルのパス名を指定したり、エクスプローラでバッチファイルを選んでダブルクリックしたりしても実行できる。この場合はコマンドプロンプトのウィンドウが新しく開いてバッチが実行されるが、終了後はウィンドウが閉じてしまう。実行結果の画面をすぐに閉じさせたくなければ、最後にpauseコマンドでも入れておくとよいだろう。

 指定されたバッチファイルが見つかると、コマンドプロンプトはその中のコマンドを1行ずつ実行し、ファイルの最後まで到達すると実行が終了する。

 コマンドの実行を途中で一時的に止めたい場合は、[Ctrl]+[S]や[Pause]キーを押すと表示が止まる(何も画面に表示しないコマンドは、その作りにもよるが、止めるのは難しい)。そこで何かキーを押せば実行は再開するし、[Ctrl]+[C]や[Ctrl]+[Break]キーを押すと「バッチ ジョブを終了しますか (Y/N)?」と表示されるので、[y]を入力すると中断できる。

バッチの中断 バッチの中断
画面表示などが行われている時に[Ctrl]+[C]を押すと、実行を中断できる。

バッチファイルをパスの通った場所へ保存してすぐ実行できるようにする

 バッチファイルがカレントフォルダにない場合、いちいちフルパス名で指定しないと起動できないようでは、とても面倒である。

 バッチファイルをよく使うなら、どこか1カ所にバッチファイルをまとめて保存しておき、そのフォルダ名をPATH環境変数に登録しておくのがよい。例えば筆者は「C:\Command」というフォルダを作成して、この中によく使うコマンドや自作のバッチファイル、(WSHやPowerShellの)スクリプトなどを保存している。そしてPATH環境変数の最後に「C:\Command」を追加している。これを「パスを通す」という。

 環境変数には「ユーザー環境変数」と「システム環境変数」の2種類があるので、用途に応じていずれかのPATH環境変数の末尾に、バッチファイルを保存してあるフォルダ名を追加する(末尾ではなく前の方に追加すると、同じ名前のコマンドがあった場合に優先して実行される)。独立したフォルダを用意せず、システムのデフォルトPATHに含まれる「C:\Windows」などにバッチファイルを保存すると、後でバッチファイルの更新などが面倒になるので、やめた方がいい。PATH環境変数の設定方法については、次の記事を参照していただきたい。

バッチファイルの場所をPATH環境変数に登録する バッチファイルの場所をPATH環境変数に登録する
バッチファイルを簡単に起動できるようにするには、バッチファイルをどこかのフォルダに集め、その場所をPATH環境変数に登録しておく。セミコロンで区切ってフォルダのパスをPATHに追加する。PATH環境は、ユーザー環境変数(ユーザーごとに固有)とシステム環境変数(システム全体で共通)の両方にあるので、どちらかで設定しておく。通常はユーザーごとに設定すればよいだろう。

       1|2|3|4 次のページへ

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。