Windows OSを管理していると、コマンドプロンプトなどでコマンドを使う機会は意外と多い。いつも決まったコマンドを実行する定型処理が多いなら、バッチファイルにしていつでも簡単に実行できるようにしておくと便利だ。基本的なバッチファイルの作成/利用方法やコツ、注意点をまとめる。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
対象OS:Windows 10/Windows 11、Windows Server 2012/Windows Server 2012 R2/Windows Server 2016/Windows Server 2019/Windows Server 2022
ファイルのコピーやバックアップ、システムの設定変更、連続するツールやコマンドの実行、フィルタ処理など、コマンドプロンプト上でいつも決まった処理を手動で繰り返していることはないだろうか?
そのような場合、Windows OSではそれらの処理を「バッチファイル」にまとめておくと、同じ手順を簡単に繰り返し実行できるようになる。
ただ、バッチファイルには固有の(クセがあるといってもいい)機能や制限などが幾つかあり、慣れるまでは細かい所でつまづきがちだ。
そこで本Tech TIPSでは基本的なバッチファイルの作成/利用方法についてまとめておく。対象はWindows 10/11とWindows Server 2012〜2022とする。もっともバッチの仕様は、Windows NTからWindows 2000になる時にいくらか機能が強化されたぐらいで、それ以降、あまり大きな変化はない。
Windows OSのバッチファイルは単なるテキストファイルである。そのため、メモ帳などを使って実行したいコマンド列を列挙し、保存すれば作成できる。
このとき、ファイルの拡張子は「.bat」か「.cmd」のいずれかにしておく。どちらでも違いはない。今から付けるなら、新しい方の「.cmd」でよいだろう。
また、ファイル保存時の文字コード(エンコード)は「ANSI」あるいは「Shift-JIS」形式を選ぶこと。「Unicode」や「UTF-16」、「UTF-8」形式にすると文字化けを引き起こすため、通常は避けるべきだ(UTF-8は利用可能だが、幾つか注意点があるので本稿では触れない)。
バッチファイルの各行には、実行したいコマンドを(基本的には)1行ずつ記述する。例えば、コマンドプロンプトの文字コード(表示モード)を切り替える「chcp.exe」というコマンドをバッチファイルで使う場合は、次のようにすればよい(chcpについてはTech TIPS「jp、usコマンドを利用する」参照)。
これは実行中のコマンド列を以後は画面に表示させないようにするための定型コマンドである。これがないと、いちいち実行するコマンド列が画面に表示されて煩わしいためだ。
ただし、バッチファイルの作成中やテスト、デバッグ中はこのコマンドを使わずに、何が実行されるのかを確認した方がいいだろう。バッチには1行ずつ実行するといったデバッグ支援機能がないので、表示を抑制していると、何が起こっているか把握できないからだ。バッチファイルが完成したら、先頭にこの行を追加して完成させる。
行頭に付けている「@」には、それを記述した行そのものを非表示にする効果がある。単に「echo off」だと、表示されないのは次の行からで、この行自体は表示されてしまう。そのため、通常はバッチの先頭で「@echo off」を実行する。
これは環境変数に対するset操作を、実行中のバッチファイル内だけに留めるためのコマンドである。「@echo off」と共に、バッチの決まり文句のようなものだと思っておけばよいだろう。
「setlocal」があると、このバッチファイル中で環境変数を作成したり、値を変更したりしても、バッチの終了後は元の値に戻る。これがないと、バッチ内で環境変数の値を変更すると、その結果はバッチの終了後(もしくは「endlocal」コマンドの実行後)もそのまま残る。そのため、環境変数の値を書き換えるバッチを作りたい場合は、「setlocal」は入れてはいけない。
これはコメントを表すコマンドであり、この行は実行されることはない。バッチファイルの説明などを記述しておこう。
これは実際に実行されるコマンドである。実行したいコマンドや処理などを1行ずつ記述しておく。
バッチファイルを作る場合は、まずコマンドプロンプト上でコマンドを手動で入力して実行し、正しく実行できるかどうか確認してから、コマンド列をバッチファイルに貼り付けるとよい。コマンドの履歴の確認やコピー方法などについては、次の記事を参照していただきたい。
作成したバッチファイルは、例えば「us.cmd」なら「us」と入力するだけで実行できる。バッチファイルがカレントフォルダ以外にある場合は、「c:\command\us」のように、フルパス名や相対パス名で指定すればよい(後述のPATH環境変数を変更すれば、この場合でも「us」だけで実行できる)。
これ以外にも、[ファイル名を指定して実行]ダイアログでバッチファイルのパス名を指定したり、エクスプローラでバッチファイルを選んでダブルクリックしたりしても実行できる。ただし、これらの場合はコマンドプロンプトのウィンドウが新しく開いてバッチが実行された後、自動的にウィンドウが閉じてしまう。実行結果の画面をすぐに閉じさせたくなければ、バッチファイルの最後に「pause」コマンドでも入れておいて、実行を一時停止させるとよい。
指定されたバッチファイルが見つかると、コマンドプロンプトはその中のコマンドを1行ずつ実行し、ファイルの最後まで到達すると実行が終了する。
コマンドの実行を途中で一時的に止めたい場合は、[Ctrl]+[S]キーや[Pause]キーを押すと表示が止まる(何も画面に表示しないコマンドは、その作りにもよるが、止めるのは難しい)。そこで何かキーを押せば実行は再開するし、[Ctrl]+[C]や[Ctrl]+[Break]キーを押すと「バッチ ジョブを終了しますか (Y/N)?」と表示されるので、[y]を入力すると中断できる。
Copyright© Digital Advantage Corp. All Rights Reserved.