【Windows機能】バッチファイルの基本コマンド一覧|目的別の使い方と実行例
バッチファイルで使うコマンドは、コピーならcopy、条件分岐ならif、繰り返しならforというように、やりたいことから選ぶと覚えやすくなります。この記事では、目的別の一覧と短い実行例をまとめました。
例はWindowsのバッチファイル(.bat)向けです。作り方から知りたい方は、バッチファイルでできること・できないことと注意点も参考にしてください。
例を試すときは、練習用フォルダと不要なファイルを使いましょう。ファイルを削除する例は、対象を確認してから実行してください。オプションの意味はコマンドによって異なり、コマンド名の後ろに /? を付けるとヘルプを確認できます。
バッチファイルの基本コマンド一覧
| やりたいこと | コマンド・書き方 |
|---|---|
| メッセージ表示・一時停止 | echo、@echo off、pause、rem |
| アプリや別のBATを起動 | start、start /wait、call |
| 処理を終了 | exit /b |
| ファイルのコピー・移動・削除 | copy、xcopy、robocopy、move、del |
| フォルダの作成・移動・確認 | mkdir、rmdir、cd、dir |
| 条件分岐・繰り返し | if、for |
| 変数・実行場所を扱う | set、%変数名%、%~dp0、path |
| フォルダ構成・ネットワークの確認 | tree、ping、ipconfig、taskkill |
メッセージを表示する・処理を一時停止する
| コマンド | 役割 |
|---|---|
| echo | メッセージを表示する |
| @echo off | 実行するコマンド自体の表示を抑える |
| pause | キー入力を待つ |
| rem | コメントを書く |
@echo off
rem 処理開始メッセージ
echo 処理を開始します
pause
日本語が文字化けする場合は、BATの保存文字コードとコマンドプロンプトのコードページが合っているか確認してください。まず英数字だけで動作を確認すると切り分けやすくなります。
アプリや別のバッチファイルを起動する
| 書き方 | 用途 |
|---|---|
| start | アプリを起動して次の処理へ進む |
| start /wait | 起動したアプリの終了を待つ |
| call | 別のBATを呼び出し、終了後に呼び出し元へ戻る |
| exit /b | 現在のバッチ処理を終了する |
アプリを起動する:start
Excelがインストールされ、excel.exeを呼び出せる環境なら、次のように起動できます。
start "" excel.exe
echo Excelを起動しましたstartの最初の引用符付き引数はウィンドウのタイトルです。空のタイトルを指定しておけば、その後ろに引用符で囲んだ実行ファイルのパスを書けます。終了を待つ場合は /wait を付けます。
別のBATを呼び出す:call
同じフォルダにあるTest1.batを呼び出す例です。Test1.batは事前に用意してください。
call "%~dp0Test1.bat"
if errorlevel 1 exit /b 1
echo Test1.bat completed.
pause呼び出されるBATもexit /bで終えれば、呼び出し元へ戻れます。exitだけではコマンドプロンプト自体が終了するため、BATだけを終了したいときは /b を付けましょう。
ファイルをコピー・移動・削除する
| コマンド | 役割 |
|---|---|
| copy | ファイルをコピー |
| xcopy | フォルダ内のファイルやサブフォルダをコピー |
| robocopy | 再試行などの条件を指定してフォルダをコピー |
| move | ファイルを移動 |
| del | ファイルを削除 |
コピー先のフォルダを作ってからコピーする
data.txtがあるフォルダで実行します。/-yを付けると、コピー先に同名ファイルがある場合に上書きを確認できます。
if not exist "backup\" mkdir "backup"
copy /-y "data.txt" "backup\"
if errorlevel 1 exit /b 1ファイルを移動する
if not exist "archive\" mkdir "archive"
move /-y "result.txt" "archive\"result.txtをarchiveフォルダへ移します。移動後は元の場所からファイルがなくなる点がコピーとの違いです。
対象を確認してからログファイルを削除する
まず、作業中のフォルダと削除対象を表示します。この段階では削除しません。
cd
dir /b /a-d "*.log"一覧に必要なファイルがないことを確認したら、次を実行します。/pを付けると、ファイルごとに確認が入ります。
del /p "*.log"delはゴミ箱を経由しません。別のフォルダで実行していないか、対象に必要なファイルが含まれていないかを確認してください。
フォルダを作る・移動する・一覧を見る
| コマンド | 役割 |
|---|---|
| mkdir(md) | フォルダを作る |
| rmdir(rd) | 空のフォルダを削除する。/sを付けると配下も削除する |
| cd | カレントフォルダを変える |
| dir | ファイルとフォルダの一覧を表示する |
if not exist "work\" mkdir "work"
cd /d "work"
if errorlevel 1 exit /b 1
dir
pauseパスは引用符で囲むと、空白を含む名前も扱えます。cdの /d は、移動先に合わせてドライブも変更する指定です。
ifで条件に合うときだけ処理する
ファイルの存在確認にはif exist、終了コードの確認にはif errorlevelを使います。
if exist "data.txt" echo data.txt exists.if errorlevel 1は「終了コードが1以上なら」という意味です。1と等しいかだけを調べる書き方ではありません。
| 直前の終了コード | if errorlevel 1の判定 |
|---|---|
| 0 | 偽:後ろの命令を実行しない |
| 1 | 真:後ろの命令を実行する |
| 2 | 真:後ろの命令を実行する |
コピーに失敗したら、その場でBATを終了する例です。判定は、確認したいコマンドの直後に置きます。
copy /-y "data.txt" "data-copy.txt"
if errorlevel 1 exit /b 1
echo Copy completed.成功・失敗を表す数値はコマンドによって異なります。例えばrobocopyは、8以上でコピー失敗を含む状態です。0以外を一律に失敗と扱わず、使うコマンドの仕様を確認しましょう。
forで複数ファイルを順番に処理する
カレントフォルダ内のテキストファイル名を表示する例です。
for %%f in (*.txt) do echo "%%f"| 要素 | 意味 |
|---|---|
| %%f | 順番に取り出したファイル名が入る変数 |
| in (*.txt) | 対象はカレントフォルダの.txtファイル |
| do | 各ファイルに対して実行する命令を続ける |
BAT内では%%f、コマンドプロンプトへ直接入力するときは%fと書きます。ファイルを引数として渡す場合は、空白を含む名前に備えて引用符で囲みます。
サブフォルダ内も含めて表示する場合は /r を付けます。
for /r %%f in (*.txt) do echo "%%f"一括処理は、最初にechoで対象を表示し、意図した範囲になっているか確かめると安心です。ログの削除だけなら、ファイル操作の節にあるdel /pの例を使えます。
setで値を使い回す
set "FOLDER=backup files"
if not exist "%FOLDER%\" mkdir "%FOLDER%"変数は%FOLDER%のように参照します。値に空白がある場合も扱えるように、参照先のパスも引用符で囲みます。
BATがあるフォルダを基準にする
cd /d "%~dp0"
if errorlevel 1 exit /b 1
dir%~dp0は、このBATが置かれているドライブとフォルダを表します。この例はローカルドライブ向けです。共有フォルダのUNCパスを扱う場合はpushd・popdを検討してください。
実行ファイルを探す場所はPATH環境変数で管理されています。pathはその確認・設定に使えます。既存のPATHを不用意に置き換えると、ほかのコマンドが見つからなくなるので注意しましょう。
treeでフォルダ構成を表示・保存する
treeはフォルダ構成をツリー形式で表示するコマンドで、BATからも使えます。ファイル名を含めるなら /f、罫線を通常の文字にするなら /a を付けます。
tree /f /a
pause一覧をテキストファイルへ保存する場合は、出力先を指定します。
tree /f /a > "folder-list.txt"同名のfolder-list.txtがあると上書きされます。出力先が調査対象内にあると、出力ファイル自身も一覧に含まれる場合があります。資料に使うときは、個人名などを含むパスが出ていないか確認しましょう。
ネットワークやアプリの状態を確認する
| コマンド | 用途 |
|---|---|
| ping | 指定した相手から応答があるか確認 |
| ipconfig | PCのIPアドレスなどを確認 |
| taskkill | プロセスを終了 |
ping example.com
ipconfig
pausepingは相手側の設定で応答しない場合もあり、応答がないだけで通信全体の障害とは断定できません。ipconfigの結果を共有するときは、必要な情報だけを抜き出しましょう。
次の例は、名前が一致するExcelプロセスを強制終了します。通常はアプリの終了操作を使い、応答しないときなどに限って検討してください。
taskkill /im excel.exe /f強制終了すると未保存の内容が失われる可能性があります。複数のExcelプロセスに影響する場合もあります。権限不足で終了できないこともあります。
必要なコマンドから一つずつ試そう
コマンドを全部覚える必要はありません。まずは表示や一覧確認の例で動きを確かめ、コピー・移動・削除へ進むと理解しやすくなります。処理が複雑になったら、PowerShellなど別の方法も検討しましょう。
仕様の確認:Microsoft Learn:if / Microsoft Learn:exit / Microsoft Learn:call / Microsoft Learn:start / Microsoft Learn:for / Microsoft Learn:del / Microsoft Learn:tree / Microsoft Learn:robocopy
サイトアイコン-2-150x150.png)