バッチファイルとは何ですか?
バッチファイルとは
バッチファイル(BATファイル)は、Windowsで使われるスクリプトの一種で、コンピュータに対する複数のコマンド(命令)をまとめて自動で実行させることができるファイルです。拡張子は「.bat」で、バッチファイルをダブルクリックするとその中に書かれたコマンドが1つずつ順番に実行されます。
通常、コマンドラインを使って手動で入力するコマンド(例: ファイルをコピーする、フォルダ内の一覧を表示する)をバッチファイルに書き込むことで何度も行う同じ作業を自動化することができます。
コマンドラインとは?
コマンドラインとはコンピュータに文字で直接命令を出す仕組みです。専用の画面にコマンドを入力して実行するとファイル操作やプログラムの実行などができます。マウスを使わずに文字だけでコンピュータを操作できるのが特徴です。
Windowsのコマンドラインツール
Windowsのコマンドラインツールにはコマンドプロンプトと PowerShell の2種類があります。
コマンドプロンプトは、Windowsに昔からある基本的なコマンドラインツールで、簡単なファイル操作やプログラムの実行などに使われます。シンプルで使いやすいですが機能は限られています。今回使用するバッチファイルは、基本的にコマンドプロンプトのコマンドを使用しています。
一方 PowerShell は、コマンドプロンプトよりも強力でより複雑な操作や自動化ができるツールで、システム管理者向けに設計されており、より高度な処理やスクリプト作成が可能です。PowerShellスクリプトは拡張子が「.ps1」になっています。
コマンドラインやバッチファイルで操作するメリット
コマンドラインやバッチファイルを使うメリットは以下の通りとなります。
マウスでのクリック操作を何度も繰り返すのは時間がかかりますが、コマンドラインやバッチファイルを使えば、複数の操作を1つのコマンドで一気に行えます。たとえば、複数のファイルをまとめて移動や名前変更する作業なども一瞬で完了できます。
バッチファイルを使えば、特定の条件や変数を使って実行内容をカスタマイズできます。ループ処理や条件分岐も可能なので、特定の場面に応じた処理を自動で行うことができます。
手動操作だと人によってミスが発生する可能性がありますが、バッチファイルを使って作業を自動化すれば、どんなに複雑な操作でも常に同じ結果を得られます。
コマンドラインは視覚的なインターフェースを使用しないため、システムのリソースを節約できます。特にサーバーやリモート環境では、コマンドラインを使うことで処理が軽くなり、パフォーマンスが向上する場合があります。
バッチファイルは、タスクスケジューラなどと組み合わせて、決まった時間に自動で実行するよう設定することも可能です。これにより、定期的な作業を自動で処理できます。
バッチファイルの作り方
デスクトップや任意のフォルダで右クリックします。メニューから「新規作成」を選び「テキスト ドキュメント」をクリックします。
新しいテキスト ドキュメントをダブルクリックして開き、メモ帳やテキストエディタでコマンドを入力します。VSCode などの便利なテキストエディタを使用すると、構文ハイライト、自動補完機能、エラー強調表示などの機能によって、コマンドの入力が迅速になってミスが減り、エラーを見つけやすくなります。
下記のコマンドは、コマンドプロンプトを開き「Hello, World!」というメッセージを表示させるコードです。
@echo off
echo Hello, World!
pause
ファイルに名前を付けて保存します。保存するときに拡張子を「.bat」もしくは「cmd」に変更します。
保存したバッチファイルをダブルクリックすることによってスクリプトが実行されます。この時にファイルに何も記述されていないと下記のエラー表示が出てしまいますので注意して下さい。
コマンドを入力して保存、ダブルクリックすると…
コマンドが実行されました!
バッチファイルの実行には、コマンドライン上で作業フォルダ内であればファイル名を入力するか、パスを指定してファイル名を入力することによっても実行することができます。
ちなみに下記はテキストエディタの VSCode でバッチファイルを作成した画面です。
ターミナルでバッチファイルを直接実行して動作を確認しながら開発を進めることができます。
それでは上記で実行したコマンドの解説をします。
@echo off…バッチファイルを実行したときに、コマンド自体が画面に表示されるのを防ぐためのコマンドです。バッチファイルでは通常、各コマンドが実行されるたびにその内容が表示されますが、@echo off を使うと実行結果だけが表示されて実行中のコマンドは表示されなくなります。
少しわかりにくいので下記のように @echo off を入れずに実行してみます。
echo Hello, World!
pause
このような結果になります。
C:\Users\Test\デスクトップ\sample>echo Hello, World!
Hello, World!
C:\Users\Test\デスクトップ\sample>pause
続行するには何かキーを押してください . . .
少し見ずらいですね。
また、@を入れずに echo off だけにすると echo off の行だけが残されて表示されてしまうので@を入れてその行も表示されないようにします。
echo…バッチファイルやコマンドプロンプトでメッセージやテキストを画面に表示するために使われる基本的なコマンドです。主にユーザーに情報を伝えたり、出力の間に空行を入れたりするために使用されます。
pause…バッチファイルの実行を一時停止し、ユーザーに何かキーを押してもらうまで処理を待機させるためのコマンドです。バッチファイルが実行中に中断し、画面に「Press any key to continue . . .」というメッセージが表示され、ユーザーに「任意のキーを押して続行してください」と促します。ユーザーがキーを押すと再び実行を再開します。
👉 【最大10,000円割引!】 XServer レンタルサーバー招待リンク
バッチファイルの基本コマンド
ここではバッチファイルでよく使う基本的なコマンドをいくつか紹介します。
cd の後に絶対パス(フルパス)か相対パスを指定することによって自分が今作業しているフォルダを移動することができます。
絶対パスで指定
cd C:\Users\Documents
相対パス – ひとつ上の階層に移動
cd ..
相対パス – 現在いるフォルダ内のfolder_nameという名前のサブフォルダに移動
cd folder_name
また、cd と単独で入力すると、現在の作業フォルダのパスが表示されます。
ファイルのエンコーディング
上記の cd コマンドに関連して指定したパスやフォルダ名に日本語が含まれている場合、エンコードが正しく設定されていないとパスが文字化けして読み込めないことがあります。
ファイルのエンコーディングとは、文字や記号をコンピュータで扱えるように、数字(バイト)の組み合わせに変換する方法です。「UTF-8」や「Shift-JIS」などの異なるエンコード方式によって、同じ文字が違うバイト列になることがあります。
バッチファイルで日本語が文字化けする主な原因は文字エンコーディングの不一致です。具体的にはバッチファイルのエンコーディングがシステムのデフォルトエンコーディングと一致しない場合や、コマンドプロンプトの文字コード設定が適切でない場合に問題が発生します。
コマンドプロンプトを開き、下記のコマンドを打ってシステムのエンコーディングを確認します。
chcp
次のように番号が出力されます。
C:\Users\Text\デスクトップ>chcp
Active code page: 932
番号によってエンコーディングの種類がわかります。
よく使われるエンコーディングの番号(コードページ)
エンコーディング | ページ番号 | 説明 |
---|---|---|
UTF-8 | 65001 | 世界中の文字を表現できるUnicodeエンコーディング。 |
Shift-JIS | 932 | 日本語環境で広く使われるエンコーディング。 |
UTF-16 (LE) | 1200 | Unicodeの16ビットエンコーディング(リトルエンディアン)。 |
UTF-16 (BE) | 1201 | Unicodeの2バイトエンコーディング(ビッグエンディアン)。 |
エンコーディングの変更
エンコーディングを変更する方法はいくつかありますが、まずファイルのエンコーディングを直接変更する方法です。ファイルを開く ➡ 「名前を付けて保存する」 を選択します。
エンコードの部分を変更して保存すればファイルのエンコードを変更することが出来ます。
コマンドライン上でも変更することができます。
chcp 65001
chcp コマンドの後にページ番号を指定すればシステムのエンコーディングを変更することができます。ただし、この方法はコマンドプロンプトのセッション内だけなのでコマンドプロンプトを閉じると元に戻ってしまいます。
その他にもテキストエディタの VSCode などでもエンコーディングを変更したり、いくつか方法がありますので、もし読み込みなどがうまくいかない場合は確認してみて下さい。
作業フォルダに新しいフォルダを作成する。md と省略することもできます。
mkdir MyFolder
パスを指定する。
mkdir C:\MyFolder
echo. > example.txt
echo Text > example.txt
echo This is a new line. >> example.txt
file.txt ファイルを backup フォルダへコピー。
copy C:\example\file.txt D:\backup\
example フォルダ内のすべての txt ファイルを backup フォルダへコピー。
アスタリスク(*)は、バッチファイルやコマンドプロンプトで使えるワイルドカードで「0文字以上の任意の文字列」にマッチします。
copy C:\example\*.txt D:\backup\
sample.txt をNewFolder に移動します。
move sample.txt C:\NewFolder
del file.txt
REMはバッチファイル内でコメントを追加するためのコマンドで、REM で始まる行は実行時に無視され、プログラムの動作には影響しません。コメントとして使用することでコードの説明や注意書きを加えるのに役立ちます。
@echo off
REM これはコメントです
echo Hello, World!
REM この行は実行されません
変数の設定 set コマンド
バッチファイルでのsetコマンドは、変数に値を割り当て、使用するためのコマンドです。バッチスクリプトの処理やデータの管理に重要な役割を果たします。
下記は基本的な変数の代入とその使用例です。
set name=John
echo %name%
まず、nameという変数にJohnが格納されます。echo %name%で、変数nameの値Johnが表示されます。
また、ここで使用する変数は現在のコマンドプロンプトのセッション内のみで有効で、コマンドプロンプトを閉じたり、新しいセッションを開いたりするとこの変数の値は消えます。
さらに、set コマンドによってシステムの環境変数を表示させることができます。
環境変数とは、システムやアプリケーション全体で利用できる設定情報を格納した変数のことで、たとえば、ファイルの保存先や実行パス、現在のユーザー名などの情報が含まれ、プログラムが必要な情報を簡単に参照できるようになります。
C:\Users\John>set
:
TEMP C:\Users\John\AppData\Local\Temp
TMP C:\Users\John\AppData\Local\Temp
USERDOMAIN YOURDOMAIN
USERDOMAIN_ROAMINGPROFILE YOURDOMAIN
USERNAME John
USERPROFILE C:\Users\John
windir C:\WINDOWS
この情報をどうやって活用するのですか?
バッチファイルの例
@echo off
echo User profile path is: %USERPROFILE%
次のように echo コマンドで %USERPROFILE% を参照し、ユーザーのプロファイルフォルダパスを表示させることができます。
出力結果
User profile path is: C:\Users\John
バッチファイルでの条件分岐
次は応用編として、バッチファイルでの条件分岐 if 文の書き方について解説します。if 文は、条件分岐を行うための構文で、特定の条件が真(True)の場合に実行する処理を指定することができます。基本的な構文は以下の通りです。
if 条件 (
実行するコマンド
)
次のコードはファイルやフォルダの存在確認する例文です。
if exist "C:\path\to\file.txt" (
echo ファイルが存在します。
) else (
echo ファイルが存在しません。
)
exist は、バッチファイルやコマンドプロンプトで使用されるコマンドの一部で、指定したファイルやフォルダが存在するかどうかを確認するための条件式です。
また、if 文の条件が偽(False)の場合に実行されるコマンドや処理を指定するための構文は else を使います。
else と複数の条件
else 文は、if 文の後に別の if 文を追加することで、複数の条件を扱うことも可能です。
@echo off
set "userInput=Hello"
if "%userInput%"=="Hello" (
echo こんにちは!
) else (
if "%userInput%"=="Goodbye" (
echo さようなら!
) else (
echo 不明な入力です。
)
)
① userInput という変数に “Hello” という値を設定します。
② 変数 userInput の値が “Hello” であるかをチェックします。
もし条件が真(True)なら、こんにちは! が表示されます。
③ 最初の if の条件が偽(False)だった場合、次の else が参照されます。
変数 userInput の値が “Goodbye” であるかをチェックします。
もし変数 userInput が “Goodbye” 真(True)であれば、さようなら! が表示されます。
ここでも条件式が 偽(False)だった場合、次の else が参照されます。
④ どちらの条件も満たさない場合に実行され、不明な入力です。と表示されます。
引数を使用したバッチファイル
バッチファイルでは引数は %1
, %2
, %3
などで指定し、これによってコマンドラインから渡された値を取得できます。これをコマンドライン引数と呼びます。
下記のコードは、コマンドライン引数を使った対象のテキストファイル内の文字列を検索するスクリプトです。
@echo off
REM 引数を利用して検索文字列とファイルパスを指定
if "%1"=="" (
echo 検索する文字列を指定してください。
exit /b
)
if "%2"=="" (
echo 検索対象のファイルを指定してください。
exit /b
)
set "searchString=%1"
set "filePath=%2"
REM ファイルが存在するか確認し、検索処理を実行
if exist "%filePath%" (
find "%searchString%" "%filePath%"
) else (
echo 指定されたファイルが見つかりません。
)
まず、最初の if 文によって一番目のコマンドライン引数(%1)が空かどうかを確認(引数がない場合)します。空であった場合は「検索する文字列を指定して下さい。」と入力を促して、スクリプトを終了します。
また、バッチファイルにおける “==” は条件式におけるイコールを表し、単なる “=” は変数の代入を意味します。
ふたつ目の if 文も同様にコマンドライン引数の(%2)が空かどうかを確認(引数が一つだけの場合)して、空であった場合は「検索するファイルを指定して下さい。」と表示させます。
さらに、exit と exit/b の違いについてですが、exit /b は 現在のバッチファイルまたはサブルーチン(バッチファイル内の特定の処理)を終了しますが、コマンドプロンプト自体は閉じません。これを使うとバッチファイルの処理を途中で終了したいときに便利です。
exit はコマンドプロンプト全体を終了します。バッチファイルから実行すると、バッチファイルの処理が終わった後にコマンドプロンプトも閉じてしまいます。
引数がふたつとも正しく設定されている場合
set "searchString=%1"
set "filePath=%2"
コマンドライン引数から渡された値が変数に代入されます。
バッチファイルやコマンドプロンプトで、特定の文字列が含まれているかどうかをファイルから検索するためのコマンドです。ファイルやテキストの中からキーワードを探して見つかった行を出力する際に便利です。ここではファイルが存在するか確認した後に find コマンドを実行する流れになっています。
find "検索文字列" [ファイル名]
バッチファイル sample.bat と同じ階層に test.txt があったとして、テキストの内容が下記の通りだったとします。
test.txt
Hello World!
こんにちは、世界!
Bonjour le monde !
Hola Mundo!
Ciao mondo!
Hallo Welt!
Olá Mundo!
Привет, мир!
你好,世界!
Hej världen!
Merhaba Dünya!
コマンドプロンプトを開き、下記のコマンドを入力します。
C:\Users\Text\デスクトップ\sample>sample.bat Ciao test.txt
下記のように出力されます。
---------- TEST.TXT
Ciao mondo!
検索することができましたね!
おわりに
このようにバッチファイルは特別なソフトウェアが不要で初心者でも扱いやすいシンプルな仕組みのうえ、複数のコマンドをまとめて自動実行できることから、手軽にファイル整理やバックアップ、システム管理などの日々の作業を効率よく進めることができます。
まだまだたくさんのコマンドやループ処理など、できることは幅広いですが今回はここまでで。
最後までご覧頂き、ありがとうございました。
自分のサーバーを持ってみたいと思いませんか?
👇 本サイトからの申し込みならエックスサーバー【最大10,000円割引】!
キャンペーンと併用してさらにお得!